CN106991102B - 倒排索引中键值对的处理方法及处理*** - Google Patents
倒排索引中键值对的处理方法及处理*** Download PDFInfo
- Publication number
- CN106991102B CN106991102B CN201610042152.7A CN201610042152A CN106991102B CN 106991102 B CN106991102 B CN 106991102B CN 201610042152 A CN201610042152 A CN 201610042152A CN 106991102 B CN106991102 B CN 106991102B
- Authority
- CN
- China
- Prior art keywords
- item
- memory block
- module
- value
- memory
- 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
Images
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/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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种倒排索引中键值对的处理方法及处理***,包括:将键值对中的值按照预设格式生成项目;将所述项目依据其权重进行排序;将所述排序后的项目存储在内存块中,并生成指向所述内存块的指针,其中所述内存块用于形成内存数组;将键值对中的键与所述指针存储为指针数组;将所述指针数组与所述内存数组构成索引列表;将多个键值对所构成的索引列表存储在哈希图中,以形成倒排索引。本发明通过将传统的倒排链存储为内存块数组,并生成对应的指针数组,不仅算法复杂度低,而且支持通过二分查找法进行动态***和删除操作,还支持TopN查询等,对内存消耗也随之降低。
Description
技术领域
本发明属于数据存储领域,尤其涉及一种倒排索引中键值对的处理方法及处理***。
背景技术
在线广告***和信息推荐***中,倒排索引是一种必须的数据结构,很多特征数据都是以倒排索引的形式进行存储,我们的***每天需要支撑百亿级别查询量。为了应对高并发、低延时的严格要求,倒排索引的特征数据通常采用键值对(Key-Value)的形式存储在全内存的键值对数据库中,用于提高性能和时延。
目前的全内存键值对***,在内存中的布局一般是通过哈希图(hashmap)实现,所述哈希图包括:哈希桶数组和冲突链;每一个健值对都会通过哈希函数计算得到哈希桶的位置,然后健值对会以一块地址连续的缓存(buffer)形式存储在冲突链中。现有的技术方案的缺陷如下:
(1)内存数组过长,在进行缓存(buffer)时无法存储整个内存数组,需要对内存数组进行截断,会导致存储和读取的算法复杂度高;
(2)无法支持TopN查询,只能查询得到整个内存数组,进而导致在查询操作时网络和性能开销较大;
(3)无法对内存数组中的单个项目(item)进行操作,比如往内存数组中***一个项目或者从内存数组中删除一个项目,目前只能将整个缓存擦除重写。
发明内容
有鉴于此,本发明的目的在于提供一种倒排索引中键值对的处理方法及处理***,可以解决现有技术中算法复杂度高、不支持TopN查询、以及不支持动态的***与删除操作等技术问题。
为解决上述技术问题,本发明实施例提供了一种倒排索引中键值对的处理方法,包括:
将键值对中的值按照预设格式生成项目;
将所述项目依据其权重进行排序,所述权重包括:原始类型中的值、和非原始类型中的权重;
将所述排序后的项目存储在内存块中,并生成指向所述内存块的指针,其中所述内存块用于形成内存数组;
将键值对中的键与所述指针存储为指针数组;
将所述指针数组与所述内存数组构成索引列表;以及
将多个键值对所构成的索引列表存储在哈希图中,以形成倒排索引。
为解决上述技术问题,本发明实施例还提供了一种倒排索引中键值对的处理***,包括:
项目生成模块,用于将键值对中的值按照预设格式生成项目;
排序模块,用于将所述项目依据其权重进行排序,所述权重包括:原始类型中的值、和非原始类型中的权重;
内存数组模块,用于将所述排序后的项目存储在内存块中,并生成指向所述内存块的指针,其中所述内存块用于形成内存数组;
指针数组模块,用于将键值对中的键与所述指针存储为指针数组;
索引列表模块,用于将所述指针数组与所述内存数组构成索引列表;以及
哈希图模块,用于将多个键值对所构成的索引列表存储在哈希图中,以形成倒排索引。
相对于现有技术,本发明实施例的提供的倒排索引中键值对的处理方法及处理***,通过将传统的倒排链存储为内存块数组,并生成对应的指针数组,不仅算法复杂度低,而且支持通过二分查找法进行动态***和删除操作,还支持TopN查询等,对内存消耗也随之降低。
附图说明
图1是本发明实施例一提供的倒排索引中键值对的处理方法的流程示意图;
图2是本发明实施例二提供的倒排索引中键值对的处理方法的流程示意图;
图3是本发明实施例三提供的倒排索引中键值对的处理方法的流程示意图;
图4是本发明实施例四提供的倒排索引中键值对的处理方法的流程示意图;
图5是本发明实施例五提供的倒排索引中键值对的处理***的模块示意图;
图6是本发明实施例提供的倒排索引中键值对的数据结构示意图。
具体实施方式
请参照附图中的图式,其中相同的组件符号代表相同的组件,本发明的原理是以实施在一适当的运算环境中来举例说明。以下的说明是基于所示例的本发明的具体实施例,其不应被视为限制本发明未在此详述的其它具体实施例。
本发明原理以上述文字来说明,其并不代表为一种限制,本领域技术人员将可了解到以下所述的多种步骤及操作亦可实施在硬件当中。本发明的原理使用许多其它泛用性或特定目的运算、通信环境或组态来进行操作。
本案可应用于通用推荐业务中,特征、标签和推荐结果等数据等都是以倒排索引形式进行存储的。请参照以下实施例,实施例一、二、三、四分别侧重于倒排索引中键值对的处理方法中的存储、***、删除、和查询的操作,实施例五侧重于倒排索引中键值对的处理***。可以理解的是:虽然各实施例的侧重不同,但其设计思想是一致的。且,在某个实施例中没有详述的部分,可以参见说明书全文的详细描述,不再赘述。
实施例一
请参阅图1,所示为本发明实施例提供的倒排索引中键值对的处理方法的流程示意图。所述倒排索引中键值对的处理方法,通常执行于服务器端,用于为信息推荐***提供数据支持。
所述倒排索引中键值对的处理方法,包括:
在步骤S101中,将键值对中的值按照预设格式生成项目。
请同时参阅图6,本步骤具体包括:
(1)判断所述键(Key)1值(Value)2对中的值2的类型是否是原始类型,其中原始类型包括字符串、和整数型,可以直接根据其值进行比较和排序的类型;
(2)若是原始类型,则获取所述值的数据类型(Type)、值(Value)、和超时时间戳(TimeStamp,TS),以生成项目21,如表1所示,其中原始类型的值用作所述项目的权重;其中补充说明的是,文字出现的英文、或其缩写、简写主要是为了描述在实际数据结构中实际使用的字段。
表1值为原始类型的项目格式
数据类型 | 值 | 超时时间戳 |
(3)若不是原始类型,则获取所述值的权重(Weight)、值(Value)、和超时时间戳(TimeStamp,TS),以生成项目21,如表2所示,其中非原始类型时通常为较为复杂的数据结构,无法直接进行比较和排序,则抽象出权重,举例而言,所述权重可以是所述值出现的频率、或对所述值的关注度等。此外,还可以通过值标识(Value ID)对值进行识别和快速区分。
表2值为非原始类型的项目格式
权重 | 值标识 | 值 | 超时时间戳 |
在步骤S102中,将所述项目依据其权重进行排序。
可以理解的是,所述权重包括:原始类型中的值、和非原始类型中的权重。
在步骤S103中,将所述排序后的项目存储在内存块中,并生成指向所述内存块的指针,其中所述内存块用于形成内存数组。
具体而言,本步骤包括:
(1)设置内存块22的项目链表,如图6所示,所述项目链表包括链表头(header)221和项目列表(Item List)222。所述链表头221用于存储项目容量(Num)、和偏移量,比如位于链表首位的项目的偏移量(first)、位于链表中间的项目的偏移量(mid)、和位于链表尾部的项目的偏移量(end)。所述项目列表用于存储多个项目(Item)2、和每个项目的长度(Len);
(2)根据所述项目容量,将所述排序后的项目存储在连续的内存块22中,所述连续的内存块用于形成有序的内存数组23;
(3)在存储过程中,根据每个项目的长度,生成所述项目对应的当前偏移量,以更新所述链表头中的三个偏移量;以及
(4)根据所述链表头中的偏移量,生成指向所述内存块22的指针112。
其中,每个项目都带有一个长度字段,可以支持根据长度进行项目链表的遍历,进而可以通过二分法进行***、删除、和查询的操作。
在步骤S104中,将键值对中的键与所述指针存储为指针数组。
如图6所示,其中指针数组11,包括:元信息(Meta Info)111、和指针(Chunk_Ptr)112。所述元信息111中用于存储如上述键1、以及优先级、和/或标识位等信息。每一指针112指向一内存块22。
在步骤S105中,将所述指针数组与所述内存数组构成索引列表。
如图6所示,索引列表3包括指针数组11、和内存数组23。
在步骤S106中,将多个键值对所构成的索引列表存储在哈希图中,以形成倒排索引。
其中,需要说明的是,在倒排索引列表3中,键1与值2通常为一对多的关系。
本发明实施例的提供的倒排索引中键值对的处理方法,通过将传统的倒排链存储为内存块数组,并生成对应的指针数组,不仅算法复杂度低,而且支持通过二分查找法进行动态***和删除操作,还支持TopN查询等,对内存消耗也随之降低。
实施例二
请参阅图2,所示为本发明实施例提供的倒排索引中键值对的处理方法的流程示意图。所述倒排索引中键值对的处理方法,通常执行于服务器端,用于为信息推荐***提供数据支持。
所述倒排索引中键值对的处理方法,包括:
在步骤S201中,接收***指令,并获取待***项目的权重值。
可以理解的是,本步骤通常执行在图1所示的步骤S106之后,即:在形成倒排索引之后,进行***(Put)操作。
在步骤S202中,通过二分查找法确定所述待***项目的***位置。
如图6所示,所述索引列表(IndexList)3包括由内存(Chunk)数组23所构成的一个全局有序的倒排链。内存数组23中的每个内存块22都是排好序的项目链表,在每个项目链表的表头(Header)221中都有对位于链表的首位、中间和尾部的项目的偏移量。所以索引列表3可以对内存数组23中的开始、中间和末尾的项目进行快速定位,而且所有项目都是有序的,那么就可以根据这些项目的位置进行两分查找,直至找到待***项目的权重值所对应的位置为止。
在步骤S203中,判断所述***位置对应的内存块是否存在空间。
请同时参阅图6,本步骤具体包括:
(1)读取项目列表中222的项目容量N1;
(2)读取链表头221中的项目个数N2;
(3)判断项目个数N2是否小于项目容量N1;
(3)若小于,则视为所述内存块存在空间,并执行步骤S204;或
(4)若不小于,则视为所述内存块不存在空间,则执行步骤S205。
在步骤S204中,若存在空间,则将所述待***项目***至所述***位置。
在步骤S205中,若不存在空间,则为所述待***项目分配新的内存块。
请同时参阅图6,所述分配新的内存块,具体包括:
(1)从当前内存块22所在的内存数组23中读取其临近的空的内存块22;
(2)为所述内存块生成对应的指针112,并存入指针数组11;以及
(3)据此对所述索引列表3进行更新。
本发明实施例的提供的倒排索引中键值对的处理方法,通过将传统的倒排链存储为内存块数组,并生成对应的指针数组,不仅算法复杂度低,仅为O(logN),而且支持通过二分查找法进行动态***操作,对内存消耗也随之降低。
实施例三
请参阅图3,所示为本发明实施例提供的倒排索引中键值对的处理方法的流程示意图。所述倒排索引中键值对的处理方法,通常执行于服务器端,用于为信息推荐***提供数据支持。
所述倒排索引中键值对的处理方法,包括:
在步骤S301中,接收删除指令,并获取待删除项目的权重值。
可以理解的是,本步骤通常执行在图1所示的步骤S106之后,即:在形成倒排索引之后,进行删除(Remove)操作。
在步骤S302中,通过二分查找法查找所述待删除项目的内存块的位置。
其中,上述查找的步骤与图2中的步骤S202原理相同,此处不再赘述。
在步骤S303中,判断所述待删除项目是否查找成功。
其中,若查找成功,则执行步骤S304,若查找不成功,则执行步骤S308,并生成查找不成功的日志保存至后台数据库、或将查找不成功的提示信息推送给用户。
在步骤S304中,从所述内存块中删除所述待删除项目。
在步骤S305中,判断执行了删除指令的内存块是否为空。
其中,若为空,则执行步骤S306,若不为空,则执行步骤S308。
在步骤S306中,删除所述内存块。
在步骤S307中,删除所述内存块所对应的指针,并更新所述索引列表。
在步骤S308中,完成删除操作。
本发明实施例的提供的倒排索引中键值对的处理方法,通过将传统的倒排链存储为内存块数组,并生成对应的指针数组,不仅算法复杂度仅为O(logN),而且支持通过二分查找法进行动态删除操作,对内存消耗也随之降低。
实施例四
请参阅图4,所示为本发明实施例提供的倒排索引中键值对的处理方法的流程示意图。所述倒排索引中键值对的处理方法,通常执行于服务器端,用于为信息推荐***提供数据支持。
所述倒排索引中键值对的处理方法,包括:
在步骤S401中,接收查询指令。
所述查询指令,通常为TopN查询指令,所述查询指令中包括但不限于:键(Key)、以及值的获取个数N。
在步骤S402中,获取查询指令中的键和截取个数。
比如查询指令为Top50,则截取所述键值对中权重排名前50的值。
在步骤S403中,根据所述键定位对应的内存数组。
其中,从资源的开销而言,上述方案只需查询2次,网络传输2*TopN,只需要消耗TopN的排序开销。而传统方案的倒排索引的查询次数是N次,网络传输N的倒排链的全量,需要消耗全量结果再排序的开销。
在步骤S404中,根据所述截取个数对内存数据中的项目进行读取,以获取其中的值。
本发明实施例的提供的倒排索引中键值对的处理方法,通过将传统的倒排链存储为内存块数组,并生成对应的指针数组,不仅算法复杂度低,而且支持TopN查询等,对内存消耗也随之降低。
实施例五
请参阅图5,所示为倒排索引中键值对的处理***的模块示意图。所述倒排索引中键值对的处理***,通常执行于服务器端,用于为信息推荐***提供数据支持。
所述倒排索引中键值对的处理***500,包括:项目生成模块51、排序模块52、内存数组模块53、指针数组模块54、索引列表模块55、哈希图模块56、接收模块61、定位模块62、空间判断模块63、***模块64、内存分配模块65、查找判断模块66、项目删除模块67、查询模块71、以及读取模块72。
项目生成模块51,用于将键值对中的值按照预设格式生成项目。
请同时参阅图6,所述项目生成模块51具体包括:
类型判断子模块511,用于判断所述键(Key)1值(Value)2对中的值2的类型是否是原始类型,其中原始类型包括字符串、和整数型,可以直接根据其值进行比较和排序的类型;
原始类型子模块512,连接于类型判断子模块511,用于当是原始类型时,获取所述值的数据类型、值、和超时时间戳,以生成项目21,其中原始类型的值用作所述项目的权重。
非原始类型子模块513,连接于类型判断子模块511,用于当原始类型时,获取所述值的权重、值、和超时时间戳,以生成项目21,其中非原始类型时通常为较为复杂的数据结构,无法直接进行比较和排序,则抽象出权重,举例而言,所述权重可以是所述值出现的频率、或对所述值的关注度等。
排序模块52,连接于项目生成模块51,用于将所述项目依据其权重进行排序。
可以理解的是,所述权重包括:原始类型中的值、和非原始类型中的权重。
内存数组模块53,连接于排序模块52,用于将所述排序后的项目存储在内存块中,并生成指向所述内存块的指针,其中所述内存块用于形成内存数组。
具体而言,所述内存数组模块53包括:
设置子模块531,用于设置内存块22的项目链表,如图6所示,所述项目链表包括链表头(header)221和项目列表(Item List)222。所述链表头用于存储项目容量(Num)、和偏移量,比如位于链表首位的项目的偏移量(first)、位于链表中间的项目的偏移量(mid)、和位于链表尾部的项目的偏移量(end)。所述项目列表用于存储多个项目(Item)2、和每个项目的长度(Len);
项目列表子模块532,用于根据所述项目容量,将所述排序后的项目存储在连续的内存块22中,所述连续的内存块用于形成有序的内存数组23;
链表头子模块533,用于在存储过程中,根据每个项目的长度,生成所述项目对应的当前偏移量,以更新所述链表头中的三个偏移量;以及
指针子模块534,用于根据所述链表头中的偏移量,生成指向所述内存块22的指针112。
其中,每个项目都带有一个长度字段,可以支持根据长度进行项目链表的遍历,进而可以通过二分法进行***、删除、和查询的操作。
指针数组模块54,连接于内存数组模块53,用于将键值对中的键与所述指针存储为指针数组。
如图6所示,其中指针数组11,包括:元信息(Meta Info)111、和指针(Chunk_Ptr)112。所述元信息111中用于存储如上述键1、以及优先级、和/或标识位等信息。每一指针112指向一内存块22。
索引列表模块55,连接于内存数组模块53和指针数组模块54,用于将所述指针数组与所述内存数组构成索引列表。
如图6所示,索引列表3包括指针数组11、和内存数组23。
哈希图模块56,连接于索引列表模块55,用于将多个键值对所构成的索引列表存储在哈希图中,以形成倒排索引。
可以理解的是,上述项目生成模块51、排序模块52、内存数组模块53、指针数组模块54、索引列表模块55、哈希图模块56,完成了倒排索引中键值对键值对的存储处理。
接收模块61,用于接收***(Put)指令、删除(Remove)指令、和查询(Get)指令。
具体而言,接收模块61在接收到***指令时,获取待***项目的权重值。
定位模块62,连接于接收模块61和哈希图模块56,用于通过二分查找法确定所述待***项目的***位置。
空间判断模块63,连接于定位模块62,用于判断所述***位置对应的内存块是否存在空间。
***模块64,连接于空间判断模块63和哈希图模块56,用于当存在空间时,将所述待***项目***至所述***位置,并对索引列表进行更新。
内存分配模块65,连接于空间判断模块63和哈希图模块56,用于当不存在空间时,为所述待***项目分配新的内存块。
请同时参阅图6,所述分配新的内存块,具体包括:从当前内存块22所在的内存数组23中读取其临近的空的内存块22;为所述内存块生成对应的指针112,并存入指针数组11;并据此对所述索引列表3进行更新。
可以理解的是,上述接收模块61、定位模块62、空间判断模块63、***模块64、以及内存分配模块65,完成了倒排索引中键值对键值对的***操作。
具体而言,接收模块61在接收到删除指令时,获取待删除项目的权重值。
所述定位模块62,连接于接收模块61,还用于通过二分查找法查找所述待删除项目的内存块的位置。
查找判断模块66,连接于定位模块62,用于判断所述待删除项目是否查找成功。
项目删除模块67,连接于查找判断模块66和哈希图模块56,用于当查找成功时,从所述内存块中删除所述待删除项目。
具体而言,所述项目删除模块67包括:
内存判断子模块671,用于判断执行了删除指令的内存块是否为空;
内存删除模块672,连接于内存判断子模块671,用于当为空时,删除所述内存块;以及
更新子模块673,连接于内存删除模块672,用于删除所述内存块所对应的指针,并更新所述索引列表。
可以理解的是,上述接收模块61、定位模块62、查找判断模块66、以及项目删除模块67,完成了倒排索引中键值对键值对的删除操作。
具体而言,所述接收模块61,还用于接收查询指令。所述查询指令,通常为TopN查询指令,所述查询指令中包括但不限于:键(Key)、以及值的获取个数N。
查询模块71,连接于接收模块61,用于获取查询指令中的键和截取个数。
所述定位模块62,连接于查询模块71,还用于根据所述键定位对应的内存数组。
其中,从资源的开销而言,上述方案只需查询2次,网络传输2*TopN,只需要消耗TopN的排序开销。而传统方案的倒排索引的查询次数是N次,网络传输N的倒排链的全量,需要消耗全量结果再排序的开销。
读取模块72,连接于定位模块62和哈希图模块56,用于根据所述截取个数对内存数据中的项目进行读取,以获取其中的值。
本发明实施例的提供的倒排索引中键值对的处理***,通过将传统的倒排链存储为内存块数组,并生成对应的指针数组,不仅算法复杂度低,而且支持通过二分查找法进行动态***和删除操作,还支持TopN查询等,对内存消耗也随之降低。
本发明实施例提供的倒排索引中键值对的处理方法及处理***属于同一构思,其具体实现过程详见说明书全文,此处不再赘述。
综上所述,虽然本发明已以优选实施例揭露如上,但上述优选实施例并非用以限制本发明,本领域的普通技术人员,在不脱离本发明的精神和范围内,均可作各种更动与润饰,因此本发明的保护范围以权利要求界定的范围为准。
Claims (12)
1.一种倒排索引中键值对的处理方法,其特征在于,包括:
将键值对中的值按照预设格式生成项目;
将所述项目依据其权重进行排序,所述权重包括:原始类型中的值、和非原始类型中的权重;
将所述排序后的项目存储在内存块中,并生成指向所述内存块的指针,其中所述内存块用于形成内存数组;
将所述键值对中的键与所述指针存储为指针数组;将所述指针数组与所述内存数组构成索引列表;
将多个键值对所构成的索引列表存储在哈希图中,以形成倒排索引;
其中,将所述排序后的项目存储在内存块中,并生成指向所述内存块的指针包括:
设置所述内存块的项目链表,所述项目链表包括链表头和项目列表,所述链表头用于存储项目容量、和偏移量,所述项目列表用于存储多个项目、和每个项目的长度;
将所述排序后的项目存储在所述内存块中,具体包括:根据所述项目容量,将所述排序后的项目存储在连续的内存块中,所述连续的内存块用于形成有序的内存数组;
在存储过程中,根据每个项目的长度,生成所述项目对应的当前偏移量,以更新所述链表头中的偏移量,所述偏移量包括:位于链表首位的项目的偏移量、位于链表中间的项目的偏移量、和位于链表尾部的项目的偏移量;以及
生成指向所述内存块的指针,具体包括:根据所述链表头中的偏移量生成指向所述内存块的指针。
2.如权利要求 1 所述的处理方法,其特征在于,将键值对中的值按照预设格式生成项目,包括:
判断所述键值对中的值的类型是否是原始类型;
若是原始类型,则获取所述值的数据类型、值、和超时时间戳,以生成项目,其中原始类型的值用作所述项目的权重;
若不是原始类型,则获取所述值的权重、值、和超时时间戳,以生成项目。
3.如权利要求 1 所述的处理方法,其特征在于,在形成倒排索引之后,还包括:
接收***指令,并获取待***项目的权重值;
通过二分查找法确定所述待***项目的***位置;
判断所述***位置对应的内存块是否存在空间;以及
若存在空间,则将所述待***项目***至所述***位置;或
若不存在空间,则为所述待***项目分配新的内存块。
4.如权利要求 1 所述的处理方法,其特征在于,在形成倒排索引之后,还包括:
接收删除指令,并获取待删除项目的权重值;
通过二分查找法查找所述待删除项目的内存块的位置;
判断是否查找成功;以及
若查找成功,则从所述内存块中删除所述待删除项目。
5.如权利要求4所述的处理方法,其特征在于,若查找成功,则从所述内存块中删除所述待删除项目,之后还包括:
判断执行了删除指令的内存块是否为空;以及
若为空,则删除所述内存块。
6.如权利要求 1 所述的处理方法,其特征在于,在形成倒排索引之后,还包括:
接收查询指令;
获取查询指令中的键和截取个数;
根据所述键定位对应的内存数组;以及
根据所述截取个数对内存数据中的项目进行读取,以获取其中的值。
7.一种倒排索引中键值对的处理***,其特征在于,包括:
项目生成模块,用于将键值对中的值按照预设格式生成项目;
排序模块,用于将所述项目依据其权重进行排序,所述权重包括:原始类型中的值、和非原始类型中的权重;
内存数组模块,用于将所述排序后的项目存储在内存块中,并生成指向所述内存块的指针,其中所述内存块用于形成内存数组;
指针数组模块,用于将键值对中的键与所述指针存储为指针数组;
索引列表模块,用于将所述指针数组与所述内存数组构成索引列表;以及哈希图模块,用于将多个键值对所构成的索引列表存储在哈希图中,以形成倒排索引;
所述内存数组模块,包括:
设置子模块,用于设置所述内存块的项目链表,所述项目链表包括链表头和项目列表,所述链表头用于存储项目容量、和偏移量,所述项目列表用于存储多个项目、和每个项目的长度;
项目列表子模块,用于根据所述项目容量,将所述排序后的项目存储在连续的内存块中,所述连续的内存块用于形成有序的内存数组;
链表头子模块,用于在存储过程中,根据每个项目的长度,生成所述项目对应的当前偏移量,以更新所述链表头中的偏移量,所述偏移量包括:位于链表首位的项目的偏移量、位于链表中间的项目的偏移量、和位于链表尾部的项目的偏移量;以及
指针子模块,用于根据所述链表头中的偏移量生成指向所述内存块的指针。
8.如权利要求 7 所述的处理***,其特征在于,所述项目生成模块,包括:
类型判断子模块,用于判断所述键值对中的值的类型是否是原始类型;
原始类型子模块,用于当原始类型时,获取所述值的数据类型、值、和超时时间戳,以生成项目,其中原始类型的值用作所述项目的权重;
非原始类型子模块,用于当原始类型时,获取所述值的权重、值、和超时时间戳,以生成项目。
9.如权利要求 7 所述的处理***,其特征在于,还包括:
接收模块,用于接收***指令,并获取待***项目的权重值;
定位模块,用于通过二分查找法确定所述待***项目的***位置;空间判断模块,用于判断所述***位置对应的内存块是否存在空间;
***模块,用于当存在空间时,将所述待***项目***至所述***位置;以及
内存分配模块,用于当不存在空间时,为所述待***项目分配新的内存块。
10.如权利要求 9 所述的处理***,其特征在于:
所述接收模块,还用于接收删除指令,并获取待删除项目的权重值;
所述定位模块,还用于通过二分查找法查找所述待删除项目的内存块的位置;
查找判断模块,用于判断是否查找成功;以及
项目删除模块,用于当查找成功时,从所述内存块中删除所述待删除项目。
11.如权利要求 10 所述的处理***,其特征在于,所述项目删除模块包括:
内存判断子模块,用于判断执行了删除指令的内存块是否为空;以及
内存删除子模块,用于当为空时,删除所述内存块。
12.如权利要求 9 所述的处理***,其特征在于:
所述接收模块,还用于接收查询指令;
查询模块,用于获取查询指令中的键和截取个数;
所述定位模块,还用于根据所述键定位对应的内存数组;
读取模块,用于根据所述截取个数对内存数据中的项目进行读取,以获取其中的值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610042152.7A CN106991102B (zh) | 2016-01-21 | 2016-01-21 | 倒排索引中键值对的处理方法及处理*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610042152.7A CN106991102B (zh) | 2016-01-21 | 2016-01-21 | 倒排索引中键值对的处理方法及处理*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106991102A CN106991102A (zh) | 2017-07-28 |
CN106991102B true CN106991102B (zh) | 2021-06-08 |
Family
ID=59414289
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610042152.7A Active CN106991102B (zh) | 2016-01-21 | 2016-01-21 | 倒排索引中键值对的处理方法及处理*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106991102B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108897817B (zh) * | 2018-06-20 | 2023-04-07 | 腾讯科技(深圳)有限公司 | 数据存储方法、检测方法及***、存储介质和计算机设备 |
CN109086430A (zh) * | 2018-08-10 | 2018-12-25 | 北京奇虎科技有限公司 | 数据存储处理方法、装置、计算设备及计算机存储介质 |
CN110201393A (zh) * | 2019-05-29 | 2019-09-06 | 北京金山安全软件有限公司 | 一种配置数据的存储方法、装置及电子设备 |
CN110335073A (zh) * | 2019-06-27 | 2019-10-15 | 杭州联汇科技股份有限公司 | 一种基于用户行为数据挖掘的实时广告精准推送方法 |
CN111639076B (zh) * | 2020-05-14 | 2023-12-22 | 民生科技有限责任公司 | 一种跨平台高效键值存储方法 |
CN111680173B (zh) * | 2020-05-31 | 2024-02-23 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | 统一检索跨媒体信息的cmr模型 |
CN111913971A (zh) * | 2020-09-02 | 2020-11-10 | 中移(杭州)信息技术有限公司 | 存储数据的修改方法、装置、电子设备及存储介质 |
CN112765155B (zh) * | 2020-12-14 | 2022-05-31 | 杭州趣链科技有限公司 | 基于区块链的键值存储方法、装置、终端设备及介质 |
CN113326388A (zh) * | 2021-05-20 | 2021-08-31 | 上海云从汇临人工智能科技有限公司 | 基于倒排表的数据检索方法、***、介质及装置 |
CN113741976B (zh) * | 2021-08-25 | 2024-06-11 | 武汉大学 | 缓存颠簸消除方法、装置、设备及存储介质 |
CN117573703B (zh) * | 2024-01-16 | 2024-04-09 | 科来网络技术股份有限公司 | 时序数据的通用检索方法、***、设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0834139A1 (en) * | 1995-06-07 | 1998-04-08 | International Language Engineering Corporation | Machine assisted translation tools |
CN1940922A (zh) * | 2005-09-30 | 2007-04-04 | 腾讯科技(深圳)有限公司 | 一种提高搜索信息速度的方法及*** |
CN103164698A (zh) * | 2013-03-29 | 2013-06-19 | 华为技术有限公司 | 指纹库生成方法及装置、待测文本指纹匹配方法及装置 |
CN103678491A (zh) * | 2013-11-14 | 2014-03-26 | 东南大学 | 一种基于Hadoop中小文件优化和倒排索引的方法 |
CN103714009A (zh) * | 2013-12-20 | 2014-04-09 | 华中科技大学 | 一种GPU上基于内存统一管理的MapReduce实现方法 |
CN103823865A (zh) * | 2014-02-25 | 2014-05-28 | 南京航空航天大学 | 一种数据库主存索引方法 |
CN103955514A (zh) * | 2014-05-05 | 2014-07-30 | 陈浩 | 一种基于Lucene倒排索引的图像特征索引方法 |
-
2016
- 2016-01-21 CN CN201610042152.7A patent/CN106991102B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0834139A1 (en) * | 1995-06-07 | 1998-04-08 | International Language Engineering Corporation | Machine assisted translation tools |
CN1940922A (zh) * | 2005-09-30 | 2007-04-04 | 腾讯科技(深圳)有限公司 | 一种提高搜索信息速度的方法及*** |
CN103164698A (zh) * | 2013-03-29 | 2013-06-19 | 华为技术有限公司 | 指纹库生成方法及装置、待测文本指纹匹配方法及装置 |
CN103678491A (zh) * | 2013-11-14 | 2014-03-26 | 东南大学 | 一种基于Hadoop中小文件优化和倒排索引的方法 |
CN103714009A (zh) * | 2013-12-20 | 2014-04-09 | 华中科技大学 | 一种GPU上基于内存统一管理的MapReduce实现方法 |
CN103823865A (zh) * | 2014-02-25 | 2014-05-28 | 南京航空航天大学 | 一种数据库主存索引方法 |
CN103955514A (zh) * | 2014-05-05 | 2014-07-30 | 陈浩 | 一种基于Lucene倒排索引的图像特征索引方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106991102A (zh) | 2017-07-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106991102B (zh) | 倒排索引中键值对的处理方法及处理*** | |
US11468027B2 (en) | Method and apparatus for providing efficient indexing and computer program included in computer readable medium therefor | |
CN110383261B (zh) | 用于多流存储装置的流选择 | |
CN110083601B (zh) | 面向键值存储***的索引树构建方法及*** | |
CN111538724B (zh) | 管理索引的方法 | |
US9495398B2 (en) | Index for hybrid database | |
US11275759B2 (en) | Data storage method and apparatus, server, and storage medium | |
CN111143368B (zh) | 一种关系型数据库数据对比方法及*** | |
JP2007122302A (ja) | 情報検索システムとインデクス管理方法およびプログラム | |
US7225186B2 (en) | Binary search tree system and method | |
CN112380276B (zh) | 一种分布式***分库分表后非分片键字段查询数据的方法 | |
CN112579595A (zh) | 数据处理方法、装置、电子设备及可读存储介质 | |
US10838875B2 (en) | System and method for managing memory for large keys and values | |
CN116521956A (zh) | 一种图数据库查询方法、装置、电子设备及存储介质 | |
CN115935020A (zh) | 一种图数据存储方法和装置 | |
CN112231400B (zh) | 分布式数据库的访问方法、装置、设备及存储介质 | |
CN113392089B (zh) | 一种数据库索引优化方法及可读存储介质 | |
US8566342B2 (en) | In-memory data optimization system | |
CN110309184B (zh) | 一种航空运价数据的缓存方法及*** | |
CN111190893B (zh) | 建立特征索引的方法和装置 | |
CN114398373A (zh) | 应用于数据库存储的文件数据存储读取方法及装置 | |
CN112269784A (zh) | 一种基于硬件实现的哈希表结构以及***、查询和删除方法 | |
CN114416741A (zh) | 基于多级索引的kv数据写入读取方法、装置及存储介质 | |
KR20220099745A (ko) | 지리공간 블록체인 데이터 검색을 위한 공간 분할 기반의 트리 인덱싱 및 질의어 처리 방법 및 장치 | |
US8849866B2 (en) | Method and computer program product for creating ordered data structure |
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 | ||
GR01 | Patent grant |