CN114676136B - 一种面向内存键值表的子集过滤器 - Google Patents
一种面向内存键值表的子集过滤器 Download PDFInfo
- Publication number
- CN114676136B CN114676136B CN202210312977.1A CN202210312977A CN114676136B CN 114676136 B CN114676136 B CN 114676136B CN 202210312977 A CN202210312977 A CN 202210312977A CN 114676136 B CN114676136 B CN 114676136B
- Authority
- CN
- China
- Prior art keywords
- key value
- value pair
- memory
- key
- filter
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000006870 function Effects 0.000 claims description 11
- 238000010276 construction Methods 0.000 claims description 10
- 230000011218 segmentation Effects 0.000 claims 1
- 238000001914 filtration Methods 0.000 abstract description 5
- 238000000034 method Methods 0.000 description 12
- 230000001133 acceleration Effects 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 230000007547 defect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种面向内存键值表的子集过滤器,主要分为五个部分:子集过滤器的定义、子集过滤器的数据项存储、子集过滤器的数据项更新、子集过滤器的重建和子集过滤器的扫描。本发明支持任意类型指标数据的过滤,支持指定任意数据特征的过滤,从而提供灵活的扫描方式,并且扫描时不需要遍历全部的指标数据,有效加速扫描操作。本发明可应用于大部分的内存键值表,具有一定的通用性。
Description
技术领域
本发明涉及风控、反欺诈等需要进行高频实时信息处理和存储的金融领域,涉及一种面向内存键值表的子集过滤器。
背景技术
在风控、反欺诈等需要实时计算的金融领域,不仅仅需要计算如“某实体过去1天的交易量”、“某实体过去1星期最大交易额”等金融指标,而且还需要进行如“寻找话费充值后30分钟内进行3C交易,再10分钟内进行贵重物品交易的实体”、“寻找相邻2笔交易金额总额超过100万元的交易实体”等复杂事件的计算和处理,这些计算需要对交易实体的指标数据进行扫描,指标数据保存在内存键值表中,因此加速内存键值表的扫描对于该类计算非常重要。
由于扫描内存键值表的全部数据时间开销巨大,目前面向内存键值表的扫描加速方法主要为构建索引,通过索引加速扫描操作,索引主要为下列2类:
(1)基于字典树的前缀索引。Redis采用了该索引方法,对键进行索引,从而实现了前缀扫描。
(2)基于B+树的索引。Aerospike采用了该索引方法,对特定类型的值(如字符、整数)进行索引,以实现该类数据的范围扫描。
在金融风控、反欺诈的复杂时间处理和计算场景下,扫描的事件和指标数据越来越复杂,扫描的方式越来越灵活多样,而上述的索引方法难以满足这些扫描需求,存在下列2点缺陷:
(1)索引支持的数据类型有限:数据格式受限于字符串、整数等普通数据类型,无法满足复杂事件和计算指标的索引需求。
(2)基于索引支持的扫描方式有限:基于字典树的前缀索引只支持字符串的前缀扫描,而基于B+树的索引只支持特定有序数据的范围扫描,满足特定条件的复杂事件和计算指标的扫描,其效率十分低下。
综上所述,上述已有索引加速扫描的方法无法完全满足风控、反欺诈等金融实时计算和复杂事件处理的扫描需求。
发明内容
针对上述已有索引加速扫描的方法所产生的问题和缺陷,本发明提出了一种面向内存键值表的子集过滤器,加速了风控、反欺诈等金融实时计算和复杂事件场景下对于内存键值表指标数据的扫描操作。
本发明的目的是通过以下技术方案来实现的:一种面向内存键值表的子集过滤器,所述子集过滤器设置有用于抽取键值对特征的过滤器函数以及匹配值,当抽取的键值对特征与匹配值一致时,子集过滤器记录键值对的内存地址;所述子集过滤器包括子集过滤器构建模块、数据项存储模块、数据项更新模块和扫描模块;
所述子集过滤器构建模块用于根据内存键值表构建一个子集过滤器,子集过滤器构建模块标记内存键值表为不可写状态,并通过过滤器函数抽取内存键值表中所有键值对数据的键值对特征,与匹配值一致时,将键值对内存地址保存到子集过滤器中;
所述数据项存储模块用于将子集过滤器记录的键值对的内存地址存储在链表中;
所述数据项更新模块用于在内存键值表对某个键值对执行完更新操作时,通过过滤器函数抽取更新后的键值对特征,当更新后的键值对特征与匹配值一致时,记录更新后的键值对的内存地址;并遍历数据项存储模块中的链表,若链表中存在旧键值对内存地址,则将其修改为更新后键值对的内存地址,否则创建新的链表项,保存更新后键值对的内存地址;
所述扫描模块用于加速对具有特定特征键值对的扫描,根据扫描线程的数量,将数据项存储模块中的分段平均分配给每个扫描线程;每扫描到一个对应特定特征键值对的内存地址,根据内存地址获取内存键值表的键值对数据。
进一步地,所述数据项存储模块具有2s个分段,每个分段拥有2b条链表,链表上存储了满足特征的键值对内存地址。
进一步地,遍历数据项存储模块中的链表时,计算键值对的键散列值,根据散列值,取最后s位确定分段,然后取之前的b位确定链表。
进一步地,所述扫描模块的每个扫描线程逐分段逐链表扫描子键值对内存地址。
本发明的有益效果::
(1)本发明支持任意类型指标数据的过滤;
(2)本发明支持指定任意特征,对数据进行过滤,从而提供灵活的扫描方式,包含但不仅限于前缀扫描、范围扫描、特定特征数据的扫描等;
(3)本发明通过对指标数据的预过滤,执行扫描时不需要遍历全部指标数据,有效加速扫描操作。
(4)本发明可应用于大部分的内存键值表,例如Intel TBB Hashtable,ChronicleMap,OHC等,具有一定的通用性。
附图说明
图1为子集过滤器的数据项存储示意图;
图2为实施例中子集过滤器存储的数据项;
图3为实施例中子集过滤器的数据项存储结构。
具体实施方式
以下结合附图对本发明具体实施方式作进一步详细说明。
本发明提供了一种面向内存键值表的子集过滤器,所述子集过滤器设置有用于抽取键值对特征的过滤器函数以及匹配值,当抽取的键值对特征与匹配值一致时,子集过滤器记录键值对的内存地址;所述子集过滤器包括子集过滤器构建模块、数据项存储模块、数据项更新模块和扫描模块;
所述子集过滤器构建模块用于指定2个过滤器关键定义如下:
filterFunction(key,value):设置一个过滤器函数,参数中key为键,value为值,该函数用于抽取键值对的特征,可以自定义实现;
matchValue():设置一个匹配值。
设定完上述2个子集过滤器定义后,在内存键值表更新键值对后,子集过滤器构建模块标记内存键值表为不可写状态,并通过过滤器函数抽取内存键值表中所有键值对数据的键值对特征,当特征与设定的匹配值一致时,子集过滤器会记录键值对的内存地址。
所述数据项存储模块用于保存所有满足子集过滤器构建模块中定义的特征的键值对数据子集。具体而言,它保存了所有满足子集过滤器构建模块中定义的特征的键值对内存地址。子集过滤器的数据项存储如图1所示,具体而言,整个子集过滤器的数据项存储模块将会分为2s个分段,每个分段拥有2b条链表,链表上存储了满足特征的键值对内存地址。
所述数据项更新模块用于当内存键值表对某个键值对执行完更新操作后,对子集过滤器进行更新。更新过程如下:
(a)调用filterFunction计算抽取更新的键值对特征,并匹配matchValue的值;
(b)若匹配的值一致,则更新子集过滤器的数据项,更新时需要传入旧键值对内存地址和更新后键值对的内存地址:
1)计算键值对的键散列值;
2)如图1,根据散列值,取最后s位确定分段,然后取之前的b位确定链表;
3)遍历链表,若链表中存在旧键值对内存地址,则将其修改为更新后键值对的内存地址,否则创建新的链表项,保存更新后键值对的内存地址。
所述扫描模块用于加速对具有特定特征键值对的扫描。扫描支持多线程扫描,其过程如下:
(a)根据扫描线程的数量,将子集过滤器的数据项存储分段平均分配给每个扫描线程;
(b)每个扫描线程逐分区逐链表扫描子集过滤器保存的数据项,即键值对内存地址;
(c)每扫描到一个数据项(即内存地址),根据内存地址获取内存键值表的键值对数据。
子集过滤器的重建,可通过子集过滤器构建模块对子集过滤器进行重建,其过程如下:
(a)标记内存键值表为不可写状态;
(b)扫描内存键值表的所有键值对数据,执行下列步骤:
1)执行步骤(1)的filterFunction,获取数据项的特征;
2)将获取的特征与步骤(1)的matchValue匹配;
3)若匹配,则将数据项的内存地址保存到子集过滤器中。
(c)标记内存键值表为可写,子集过滤器重建完成。
以一个实施例的方式,对上述面向内存键值表的子集过滤器进行进一步的说明。
该实施例有如下假设:
(1)样例中包含100条键值对数据;
(2)样例中,键为整数,范围为1~100,代表用户ID;值为整数,范围为1~100,代表该用户的交易次数,每个整数有且仅有1个键值对,键与值相同;
(3)样例中,设定了一个扫描任务,扫描所有值大于90的所有键值对;
(4)样例中,子集过滤器的数据项存储有2个分段,每个分区有2条链表;
(5)样例中,子集过滤器的扫描线程为2个。
首先,对于子集过滤器的定义,该样例中可将子集过滤器定义为:
(1)过滤器函数:filterFunction(key,value):return value>95。它会抽取键值对的特征,该特征表明键值对的值大于9000;
(2)匹配值:matchValue():return true。即当键值对的值大于95时,特征会得到匹配,键值对数据项会被保存到子集过滤器中。
然后,对于子集过滤器的重建,首先将标记内存键值表为不可写状态,然后扫描所有的键值对。可知,满足子集过滤器定义的键值对总共有5条。最后恢复内存键值表为可写状态。重建后,子集过滤器存储的数据项如图2所示。
接着,对于子集过滤器的更新,有下列的实时样例:
(1)将key为95的键值对的value修改为98,那么子集过滤器将key为95的旧键值对内存地址修改为更新后的键值对内存地址;
(2)往内存键值表***key为101,value为101的键值对,那么子集过滤器将会保存该键值对的内存地址;
(3)往内存键值表***key为0,value为0的键值对,由于该键值对的特征与子集过滤器定义的匹配值不一致,因此子集索引不会保存该键值对的内存地址。
最后,对于子集过滤器的扫描,假设子集过滤器的数据项存储为如图3的结构,那么2个扫描线程分别会扫描分段#0和分段#1的数据项,最后总共扫描只需扫描5个符合子集过滤器定义的键值对,而不需要扫描全部100个键值对。
实施效果
为了验证本发明的效果,本发明的子集过滤器接入了OHC,并和扫描全部键值对的方法(下文简称普通扫描)进行对比。测试方案如下所示:
服务端节点软硬件配置为:CPU:Intel(R)Xeon(R)CPU E5-2609 [email protected](12-cores);内存:250GB;操作***:CentOS 7.8。
子集过滤器的分段数和每个分段的链表数均为256;键值对数据总量为1000万条;创建1个子集过滤器,配置3个被子集过滤器记录的数据项数量,分别为:1万条、10万条、50万条、100万条和200万条;扫描的线程数配置为1。
经过10轮测试,测得扫描的延迟平均值如下表1所示:
表1普通扫描与子集过滤器扫描的延时对比
综上可知,在面向内存键值表的子集过滤器方法下,其扫描延迟远低于普通扫描的延迟,能满足实施风控、反欺诈等所需的复杂事件计算和处理的要求。
上述实施例用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要求的保护范围内,对本发明做出的任何修改和改变,都落入本发明的保护范围。
Claims (2)
1.一种面向内存键值表的子集过滤器,其特征在于,所述子集过滤器设置有用于抽取键值对特征的过滤器函数以及匹配值,当抽取的键值对特征与匹配值一致时,子集过滤器记录键值对的内存地址;所述子集过滤器包括子集过滤器构建模块、数据项存储模块、数据项更新模块和扫描模块;
所述子集过滤器构建模块用于根据内存键值表构建一个子集过滤器,子集过滤器构建模块标记内存键值表为不可写状态,并通过过滤器函数抽取内存键值表中所有键值对数据的键值对特征,与匹配值一致时,将键值对内存地址保存到子集过滤器中;
所述数据项存储模块用于将子集过滤器记录的键值对的内存地址存储在链表中;所述数据项存储模块具有2s个分段,每个分段拥有2b条链表,链表上存储了满足特征的键值对内存地址;
所述数据项更新模块用于在内存键值表对某个键值对执行完更新操作时,通过过滤器函数抽取更新后的键值对特征,当更新后的键值对特征与匹配值一致时,记录更新后的键值对的内存地址;并遍历数据项存储模块中的链表,计算键值对的键散列值,根据散列值,取最后s位确定分段,然后取之前的b位确定链表;若链表中存在旧键值对内存地址,则将其修改为更新后键值对的内存地址,否则创建新的链表项,保存更新后键值对的内存地址;
所述扫描模块用于加速对具有特定特征键值对的扫描,根据扫描线程的数量,将数据项存储模块中的分段平均分配给每个扫描线程;每扫描到一个对应特定特征键值对的内存地址,根据内存地址获取内存键值表的键值对数据。
2.根据权利要求1所述的一种面向内存键值表的子集过滤器,其特征在于,所述扫描模块的每个扫描线程逐分段逐链表扫描子键值对内存地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210312977.1A CN114676136B (zh) | 2022-03-28 | 2022-03-28 | 一种面向内存键值表的子集过滤器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210312977.1A CN114676136B (zh) | 2022-03-28 | 2022-03-28 | 一种面向内存键值表的子集过滤器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114676136A CN114676136A (zh) | 2022-06-28 |
CN114676136B true CN114676136B (zh) | 2024-06-18 |
Family
ID=82075261
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210312977.1A Active CN114676136B (zh) | 2022-03-28 | 2022-03-28 | 一种面向内存键值表的子集过滤器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114676136B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106096023A (zh) * | 2016-06-24 | 2016-11-09 | 腾讯科技(深圳)有限公司 | 数据读取方法、数据写入方法及数据服务器 |
CN109416694A (zh) * | 2016-07-11 | 2019-03-01 | 微软技术许可有限责任公司 | 包括资源有效索引的键值存储*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110083601B (zh) * | 2019-04-04 | 2021-11-30 | 中国科学院计算技术研究所 | 面向键值存储***的索引树构建方法及*** |
CN113268545B (zh) * | 2021-06-03 | 2022-05-17 | 浙江邦盛科技有限公司 | 一种增量合并与全量相结合的集群节点间键值数据异步复制方法 |
-
2022
- 2022-03-28 CN CN202210312977.1A patent/CN114676136B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106096023A (zh) * | 2016-06-24 | 2016-11-09 | 腾讯科技(深圳)有限公司 | 数据读取方法、数据写入方法及数据服务器 |
CN109416694A (zh) * | 2016-07-11 | 2019-03-01 | 微软技术许可有限责任公司 | 包括资源有效索引的键值存储*** |
Also Published As
Publication number | Publication date |
---|---|
CN114676136A (zh) | 2022-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Goethals et al. | FIMI’03: Workshop on frequent itemset mining implementations | |
US6678687B2 (en) | Method for creating an index and method for searching an index | |
Sarda et al. | An adaptive algorithm for incremental mining of association rules | |
US7603339B2 (en) | Merging synopses to determine number of distinct values in large databases | |
US7080091B2 (en) | Inverted index system and method for numeric attributes | |
US6546394B1 (en) | Database system having logical row identifiers | |
CA2388515C (en) | System for managing rdbm fragmentations | |
US7676453B2 (en) | Partial query caching | |
CN112613038B (zh) | 一种基于知识图谱的安全漏洞分析方法 | |
US20080120274A1 (en) | Approximating a database statistic | |
ZA200100187B (en) | Value-instance-connectivity computer-implemented database. | |
CN111506621A (zh) | 一种数据统计方法及装置 | |
Chen et al. | CEMiner--An Efficient Algorithm for Mining Closed Patterns from Time Interval-Based Data | |
CN111813744A (zh) | 文件的搜索方法、装置、设备及存储介质 | |
CN114676136B (zh) | 一种面向内存键值表的子集过滤器 | |
JP2001527240A (ja) | データ構造内の管理 | |
CN116226086A (zh) | 一种数据迁移过程中分段数据的顺序维护与校验方法 | |
Morfonios et al. | Supporting the data cube lifecycle: the power of ROLAP | |
CN109657108B (zh) | 一种域名资产数据存储和查询方法和*** | |
JP3534471B2 (ja) | マージソート方法及びマージソート装置 | |
US20230195705A1 (en) | Branching for tree structure in database system | |
Itkar et al. | An efficient and optimised frequent pattern mining using novel multipath-graph structure | |
CN117874019A (zh) | 一种基于路径压缩优化的默克尔帕特里夏树 | |
CN105956099A (zh) | 一种基于HBase高表的主键设计方法 | |
CN106528651A (zh) | 一种面向家庭数据库的模糊查询方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |