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 | |
CN110083601B (zh) | 面向键值存储系统的索引树构建方法及系统 | |
CN110383261B (zh) | 用于多流存储装置的流选择 | |
CN111538724B (zh) | 管理索引的方法 | |
CN111143368B (zh) | 一种关系型数据库数据对比方法及系统 | |
US9495398B2 (en) | Index for hybrid database | |
JP2007122302A (ja) | 情報検索システムとインデクス管理方法およびプログラム | |
CN109522428B (zh) | 一种基于索引定位的图计算系统的外存访问方法 | |
CN106407303A (zh) | 数据存储、查询方法及装置 | |
US20050216445A1 (en) | Binary search tree system and method | |
CN112380276B (zh) | 一种分布式系统分库分表后非分片键字段查询数据的方法 | |
US10838875B2 (en) | System and method for managing memory for large keys and values | |
CN116521956A (zh) | 一种图数据库查询方法、装置、电子设备及存储介质 | |
CN115935020A (zh) | 一种图数据存储方法和装置 | |
CN112231400B (zh) | 分布式数据库的访问方法、装置、设备及存储介质 | |
CN112269784B (zh) | 一种基于硬件实现的哈希表装置以及插入、查询和删除方法 | |
CN110309184B (zh) | 一种航空运价数据的缓存方法及系统 | |
CN111190893B (zh) | 建立特征索引的方法和装置 | |
CN114416741A (zh) | 基于多级索引的kv数据写入读取方法、装置及存储介质 | |
US20200320054A1 (en) | Computer program for providing database management | |
US8849866B2 (en) | Method and computer program product for creating ordered data structure | |
CN113051274B (zh) | 一种海量标签存储系统及方法 | |
CN117540056B (zh) | 数据查询的方法、装置、计算机设备和存储介质 | |
CN118394979B (zh) | 用于Neo4j图数据库闪回查询方法、装置和存储介质 |
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 |