CN109933584B - 一种多级无序索引方法与系统 - Google Patents

一种多级无序索引方法与系统 Download PDF

Info

Publication number
CN109933584B
CN109933584B CN201910099393.9A CN201910099393A CN109933584B CN 109933584 B CN109933584 B CN 109933584B CN 201910099393 A CN201910099393 A CN 201910099393A CN 109933584 B CN109933584 B CN 109933584B
Authority
CN
China
Prior art keywords
unordered
key
queue
keys
value
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
Application number
CN201910099393.9A
Other languages
English (en)
Other versions
CN109933584A (zh
Inventor
王平
杨洪章
屠要峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Peking University
ZTE Corp
Original Assignee
Peking University
ZTE Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Peking University, ZTE Corp filed Critical Peking University
Priority to CN201910099393.9A priority Critical patent/CN109933584B/zh
Publication of CN109933584A publication Critical patent/CN109933584A/zh
Application granted granted Critical
Publication of CN109933584B publication Critical patent/CN109933584B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公布了一种快速的多级无序索引方法与系统,在基于存储器件构建的键值系统中,将所有键组织成B+树,采用顺序法或改进的二分法对键进行快速索引,查找叶子节点中特定的键及其值地址,从而通过多级无序的叶子节点实现有序的索引。系统包括:第一存储器件、第二存储器件;分别用于存储B+树的非叶子节点和叶子节点;可分别采用相同或不同的存储器件;或为同一个存储器件中划分的相互隔离的存储区域。本发明通过多级无序的索引,巧妙地实现了有序的索引,从而兼具“有序索引”和“无序索引”的优点,同时满足了读、写、删除操作对高性能的需求和效果。

Description

一种多级无序索引方法与系统
技术领域
本发明涉及大数据处理技术及存储索引技术领域,尤其涉及一种快速的多级无序索引方法与系统。
背景技术
随着大数据时代的到来,键值系统(Key-Value storage system,KV)迎来了飞速的发展。键值系统在首次执行写操作时,为每个值(Value)分配一个全局唯一的键(Key)。在后续的读操作和删除操作时,均需首先获取该键。因此,键的快速索引速度直接影响甚至决定了键值系统的性能。
现有的快速索引方法主要有Hash索引和B+树索引两种:Hash索引不支持范围查找、存在哈希冲突,因此应用范围较窄。B+树索引支持范围查找,且不存在哈希冲突的问题,因此成为目前主流的一种方法。
B+树索引的精神实质是:将所有键组织成一棵B+树,非叶子节点用于对键的索引,叶子节点保存键和值,在每一层非叶子节点进行一次二分查找(或称折半查找),即可快速地完成对键的索引。
但是,针对叶子节点组织的两种现有技术存在严重弊端,无法同时满足读、写、删操作的高性能需求。其一是有序索引,其原理最为简单、最为人们熟知、应用范围最为广泛,已成为本领域的公知常识,如图1所示,其优点是读操作的性能高,缺点是写和删操作的性能低;其二是无序索引,例如CN201310456838.7,如图2所示,其优点是写和删除操作的性能高,缺点是读操作的性能低。
发明内容
为了克服上述现有技术的不足,本发明提供一种多级无序索引方法与系统,通过多级无序的叶子节点,巧妙地实现了有序的索引,从而兼具“有序索引”和“无序索引”的优点,同时满足了读、写、删除操作对高性能的需求和效果。
本发明提供的技术方案是:
一种快速的多级无序索引方法,在基于存储器件构建的键值系统中,将所有键组织成B+树,通过多级无序的叶子节点实现有序的索引,包括如下步骤:
1)将所有键组织成一棵B+树;其中:
11)非叶子节点用于对键的索引,每一层非叶子节点都是有序的;
12)叶子节点用于存储所有键和值;
具体实施时,叶子节点包括第一无序队列、第二无序队列和第三无序队列;第一无序队列包括位图元素和普通元素。位图元素以二进制方式呈现,各个位只能是1或0。某位是1代表第二无序队列对应的元素非空闲,某位是0时代表第二无序队列对应的元素是空闲。典型的位图占用1个字节,共有8位。通过位图可以计算出该叶子节点的键数量,计算方法是将各位相加。普通元素是无序的,通过普通元素能够查找到键在第二无序队列的元素序号,以及值在第三无序队列中的元素序号。第二无序队列包含普通元素,其内容为键。第二无序队列也是无序的。第三无序队列包含普通元素,其内容为值。键和值是成对关联出现的,关联的键和值在第二无序队列和第三无序队列的元素序号是相同的。
2)对键进行快速索引,查找叶子节点中特定的键KeyP及其值地址,P为字母A~Z;由此实现键值系统多级无序的快速索引。
本发明对键进行快速索引的方法包括顺序法(包括正序法和逆序法)或二分法(也称折半法);二分法更适用于对特定键的索引操作,例如读键、写键、删键。顺序法更适用于对特定范围键的索引操作,例如范围读。
其中,正序遍历叶子节点中所有键和值地址包括如下过程:
2A1)首先读取第一无序队列的第一个元素,其内容记为a;
2A2)然后读取第二无序队列的第a个元素,其内容记为KeyA,代表键KeyA。其次读取第三无序队列的第a个元素,其内容为ValueA,代表值ValueA。
2A3)其次读取第一无序队列的第二个元素,其内容记为b,然后读取第二无序队列的第b个元素,其内容记为KeyB,代表键KeyB;其次读取第三无序队列的第b个元素,其内容记为ValueB,代表值ValueB;
以此类推,直至读取第一无序队列的最后一个元素,其内容记为z;然后读取第二无序队列的第z个元素,其内容记为KeyZ,代表键KeyZ。其次读取第三无序队列的第z个元素,其内容记为ValueZ,代表值ValueZ,即可实现键值系统多级无序的快速遍历。
采用改进的二分查找法查找叶子节点中特定的键KeyP对应的值ValueP,包括如下步骤:
2B1)假设第一无序队列共有k个元素,首先读取第一无序队列的第k/2个元素,其内容记为c;
2B2)然后读取第二无序队列的第c个元素,其内容记为KeyC;
2B3)对比KeyP和KeyC;如果相等则找到;如果KeyP大于KeyC,那么继续查找k*3/4,如果KeyP小于KeyC,那么继续查找k/4;以此类推,直至找到或确认不存在;
2B4)假设最终找到第二无序队列的第d个键为KeyP,则第三无序队列的第d个元素的内容即为所查找的ValueP。
利用上述多级无序的快速索引方法,实现对键值系统中键的四个基本操作,主要包括:写操作(SET)、单键读操作(GET)、范围读操作(SCAN)、删操作(DELETE)。具体实施如下:
一、写操作(SET),执行如下步骤:
步骤1:为值ValueN分配全局唯一的键KeyN,KeyN为数字。
值的形态包括但不限于:数值、图片、文本、表情、文件、邮件、字符串、地址等。键的分配方法包括但不限于:顺序分配法、倒序分配法、随机分配法、求余数分配法等。
步骤2:由B+树的根节点起,逐层检索子节点,直至确定该键应存储的叶子节点,标记为叶子节点NodeK。在非叶子节点均按照有序的形式进行组织。
在非叶子节点检索的方法包括但不限于:顺序法、逆序法、二分查找法,优选地应使用二分查找法。
逆序遍历的过程是正序遍历过程的逆过程。
步骤3:在叶子节点NodeK中:
步骤3.1:读取第一无序队列中的位图元素,得出节点存储的键的个数count,并且找到第x个元素为0。找到为0的元素的方法包括但不限于:顺序法、逆序法、随机法。
步骤3.2:将位图中第x个元素由0修改为1,将键KeyN写入第二无序队列的第x元素,将值ValueN写入第三无序队列的第x元素。
步骤3.3:将x写入第一无序队列中第y个元素,原第y个位置及其之后位置的元素依次后移。y为对第二无序队列中的所有元素的排序后,键KeyN的顺序。
辨别y的方法包括但不限于:(1)在第一无序队列中由前至后依次查找相应的第二无序队列中的值。(2)在第一无序队列中由后至前依次查找相应的第二无序队列中的值。(3)在第一无序队列中折半查找相应的第二无序队列中的值。
步骤4:写入操作结束。
二、单键读操作(GET),执行如下步骤:
步骤1:读取一个键的值,键的编号为KeyN,KeyN为数字;
由B+树的根节点起,逐层检索子节点,直至确定该键应存储的叶子节点,标记为叶子节点NodeK。
步骤2:读取第一无序队列中的位图元素,得出叶子节点NodeK存储的键的个数count。
步骤3:遍历第一无序队列中的所有count个元素,及其在第二无序队列中的相应键。遍历方法包括但不限于:顺序法、逆序法、二分查找法。
步骤4:假设在第一无序队列的第b个元素的内容为c,第二无序队列的第c个键的内容恰好等于KeyN,则停止遍历。
步骤5:第三无序队列的第c个元素的内容,记为ValueC,将其作为读取结果反馈给调用程序。
步骤6:如果在步骤3中的遍历结束后仍未找到,则反馈给调用程序:该键值不存在。
步骤7:单键读操作结束。
三、范围读操作(SCAN),读取键范围对应的值,执行如下步骤:
步骤1:确定某一范围的键应存储的叶子节点;
具体地,读取键范围为KeyN-KeyM的值,其中KeyN和KeyM为数字。由B+树的根节点起,逐层检索子节点,直至确定该键范围应存储的叶子节点。分为三类叶子节点:最左侧的节点记为NodeX,中间的节点记为NodeY,最右侧的节点记为NodeZ,其中,中间的节点可能存在多个,均采用相同的处理方法。
步骤2:在叶子节点NodeX中,由后至前进行遍历,当遇到第一个不在KeyN-KeyM范围的键时即停止遍历,将已遍历的键和值记录在内存。
步骤3:在叶子节点NodeY中,由前至后进行遍历,将所有键和值记录在内存。
步骤4:在叶子节点NodeZ中,由前至后进行遍历,当遇到第一个不在KeyN-KeyM范围的键时即停止遍历,将已遍历的键和值记录在内存。
步骤5:将上述记录在内存中的键和值,反馈给调用程序。
四、删操作(DELETE),执行如下步骤:
步骤1:设待删除键为KeyN的键值对,KeyN为数字;
由B+树的根节点起,逐层检索子节点,直至确定该键应存储的叶子节点,标记为叶子节点NodeK。
步骤2:读取第一无序队列中的位图元素,得出叶子节点NodeK存储的键的个数count。
步骤3:遍历第一无序队列中的count个元素,及其在第二无序队列中的相应键。遍历方法包括但不限于:顺序法、逆序法、二分查找法。
步骤4:假设在第一无序队列的第b个元素为c,第二无序队列的第c个元素的内容恰好等于KeyN,则停止遍历。
步骤5:在第三无序队列中,第c个元素的内容,记为ValueC,将其删除。
步骤6:在第二无序队列中,将第c个元素的内容KeyN删除。
步骤7:在第一无序队列中,将位图的第c个位由1改为0。
步骤8:在第一无序队列中,将第b个元素的内容删除,将第b个元素之后的所有元素依次前移。
步骤9:删除操作结束。
利用上述多级无序的快速索引方法,本发明还提供一种多级无序的快速索引系统,包括:第一存储器件、第二存储器件;
A.第一存储器件用于存储B+树的非叶子节点。所有的键组织成一颗B+树,非叶子节点用于对键的索引,每一层非叶子节点都是有序的。
B.第二存储器件用于存储B+树的叶子节点;包括:第一无序队列、第二无序队列和第三无序队列;
B1.第一无序队列,包括位图元素和普通元素。位图元素以二进制方式呈现,各个位只能是1或0。某位是1代表第二无序队列对应的元素非空闲,某位是0时代表第二无序队列对应的元素是空闲。典型的位图占用1个字节,共有8位。通过位图可以计算出该叶子节点的键数量,计算方法是将各位相加。普通元素是无序的,通过普通元素能够查找到在第二无序队列的元素序号。
B2.第二无序队列,用于存储键。第二无序队列也是无序的。
B3.第三无序队列,用于存储值。在第二无序队列中每一个非空的键都会在第三无序队列中存储值。第三无序队列也是无序的。
上述多级无序的快速索引系统中的第一存储器件、第二存储器件,既可以是不同的存储器件(如DRAM、NVM、SSD),也可以是同种存储器件(例如,有两个DRAM,分别是第一、第二存储器件),还可以是同一个存储器件(只有一个DRAM,划分为两个相互隔离的区域,分别是第一、第二存储器件)。
与现有技术相比,本发明的有益效果是:
本发明采用多级无序索引实现快速索引,与现有技术的一级无序索引或一级有序索引相比,能够对写、读、删、范围查找等操作都能更高效的完成。在实现快速索引的基础上,实现对存储器对键的快速读写操作。
采用本发明所述方法,与现有技术相比,兼具“有序索引”和“无序索引”的优点,同时满足了读、写、删除操作对高性能的需求,具有很强技术优势。
附图说明
图1是现有技术一级有序索引的示意图。
图2是现有技术一级无序索引的示意图。
图3是本发明提供的多级无序索引的示意图。
图4是本发明实施例写入键113的步骤图解。
图5是本发明实施例读键113的步骤图解。
图6是本发明实施例范围读键98至135的步骤图解。
图7是本发明实施例删键113的步骤图解。
具体实施方式
下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
本发明采用多级无序索引实现快速索引,与现有技术的一级无序索引或一级有序索引相比,能够更高效的完成写、读、删、范围查找等操作。
实施例场景描述:含有2种存储器件:DRAM内存、SSD固态硬盘,将B+树的非叶子节点放在DRAM中,叶子节点放在SSD中。在该实施用例中,值为字符串小单词,键的取值范围为0至200。
当新写入一个字符串pop时:
(1)为该字符串pop分配全局唯一的键113。
(2)读取该B+树的根节点,逐层遍历。由于键113介于51至120,因此逐一检查Node3的子节点。由于键113介于102至120,因此最终需要进入叶子节点Node10。
(3)在叶子节点Node10中:
(3.1)读取第一无序队列的位图元素,逐一检查该位图的各个位,该叶子节点存有5个键;另外,检查到第3位是0,即表示第二无序队列和第三无序队列中的第3个元素都是空闲的。因此,将113写入第二无序队列的第3个元素,将字符串pop写入第三无序队列的第3个元素。最后,将位图第3位修改为1。
(3.2)读取第一无序队列的第3个元素为7,在第二无序队列的第7个键为112。由于113键大于112,因此在第一无序队列的第3个元素之后进一步查找。读取第一无序队列的第4个元素为4,在第二无序队列的第4个键为116。由于113键介于112和116之间,因此113号应写入第4个元素。
(3.3)在第一无序队列中,第5个元素的内容2移动到第6个元素,第4个元素的内容4移动到元素5,将3写入第4个元素。
(4)完成新写入操作。
当查找键113的字符串时:
(1)读取该B+树的根节点,逐层遍历。由于键113介于51至120,因此逐一检查Node3的子节点。由于键113介于102至120,因此最终需要进入叶子节点Node10。
(2)在叶子节点J中:
(2.1)读取第一无序队列的位图元素,逐一检查该位图的各位,得出该叶子节点存有6个键。
(2.2)读取第一无序队列的第3个元素为7,在第二无序队列的第7个键为112。由于键113大于112,因此在第一无序队列的第3个元素之后进一步查找。
(2.3)读取第一无序队列的第4个元素为3,在第二无序队列的第3个键为113,即找到。
(2.4)在第三无序队列中,将第3个元素的内容字符串“pop”返回给调用程序。
当范围查找键98至键135的字符串时:
(1)读取该B+树的根节点,逐层遍历。由于键范围98至135,因此需要进入三个叶子节点进一步检索:叶子节点Node9的后半段,叶子节点Node10的全部,叶子节点Node11的前半段。
(2)在叶子节点Node9中:
(2.1)读取第一无序队列的位图元素,逐一检查该位图的各个位,得到该叶子节点存有3个键。
(2.2)由后至前进行遍历:读取第一无序队列的第3个元素为2,读取第二无序队列的第2个元素为101,在第三无序队列中,将第2个元素字符串QQ暂存在内存中。由于101大于98,因此继续。
(2.3)读取第一无序队列的第2个元素为5,读取第二无序队列的第5个元素为98,在第三无序队列中,将第5个元素字符串YY暂存在内存中,因找到键98,故不再继续。
(2.4)将内存中暂存的元素字符串YY标记为p1,将元素字符串QQ标记为p2。
(3)在叶子节点Node10中:
(3.1)读取第一无序队列的位图元素,逐一检查该位图的各个位,得出该叶子节点存有6个键。
(3.2)由前至后进行遍历:读取第一无序队列的第1个元素为1,在第三无序队列中,将第1个元素字符串red暂存在内存中,标记为p3。
(3.3)读取第一无序队列的第2个元素为6,在值的地址指针队列中,将第6个元素字符串blue暂存在内存中,标记为p4。
(3.4)读取第一无序队列的第3个元素为7,在值的地址指针队列中,将第7个元素字符串cat暂存在内存中,标记为p5。
(3.5)读取第一无序队列的第4个元素为3,在值的地址指针队列中,将第3个元素字符串pop暂存在内存中,标记为p6。
(3.6)读取第一无序队列的第5个元素为4,在值的地址指针队列中,将第4个元素字符串fish暂存在内存中,标记为p7。
(3.7)读取第一无序队列的第6个元素为2,在值的地址指针队列中,将第2个元素字符串ball暂存在内存中,标记为p8。
(4)在叶子节点Node11中:
(4.1)读取第一无序队列的位图元素,逐一检查该位图的各个位,得出该叶子节点存有4个键。
(4.2)由前至后进行遍历,读取第一无序队列的第1个元素为4,读取第二无序队列的第4个元素为124。在值的地址指针队列中,将第4个元素字符串5C暂存在内存中,标记为p9。由于124小于135,因此继续。
(4.3)读取第一无序队列的第2个元素为2,读取第二无序队列的第2个元素为136,由于136大于135,因此结束。
(5)按照p1、p2……p9的顺序,返回调用程序。
当删除键113的字符串时:
(1)读取该B+树的根节点,逐层遍历。由于键113介于51至120,因此逐一检查Node3的子节点。由于键113介于102至120,因此最终需要进入叶子节点Node10。
(2)在叶子节点Node10中:
(2.1)读取第一无序队列的位图元素,逐一检查该位图的各个为,该叶子节点共有6个键。
(2.2)读取第一无序队列的第3个元素为7,在第二无序队列的第7个元素读出键为112。由于键113大于112,因此在第一无序队列的第3元素之后进一步查找。
(2.3)读取第一无序队列的第4个元素为3,在第二无序队列的第3个元素读出键为113,即找到。在第三无序队列中,将第3个元素字符串“pop”删除。
(2.4)在第二无序队列中,将第3个元素113删除。
(2.5)在第一无序队列中,将第4个元素3删除,将第5个元素的内容4移动至第4个元素,将第6个元素的内容2移动至第5个元素。
(2.6)将位图中第3个位由1改为0。
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

Claims (8)

1.一种多级无序索引方法,在基于存储器件构建的键值系统中,将所有键组织成B+树,通过多级无序的叶子节点实现有序的索引;包括如下步骤:
1)将所有键组织成一棵B+树;其中:
非叶子节点用于对键的索引,每一层非叶子节点都是有序的;
叶子节点用于存储所有键和值;叶子节点包括第一无序队列、第二无序队列和第三无序队列;第一无序队列包括位图元素和普通元素;在第二无序队列中每一个非空的键都会在第三无序队列中存储值;键和值成对关联出现;关联的键和值在第二无序队列和第三无序队列的元素序号相同;通过普通元素能够查找到键在第二无序队列的元素序号,以及值在第三无序队列中的元素序号;
2)采用顺序法或改进的二分法对键进行快速索引,查找叶子节点中特定的键及其值;
采用顺序法正序遍历叶子节点中所有键和值包括如下过程:
2A1)首先读取第一无序队列的第一个元素,记为a;
2A2)然后读取第二无序队列的第a个元素,记为KeyA,代表键KeyA;其次读取第三无序队列的第a个元素,记为ValueA,代表值ValueA;
2A3)读取第一无序队列的第二个元素,其内容记为b,然后读取第二无序队列的第b个元素,其内容记为KeyB,代表键KeyB;其次读取第三无序队列的第b个元素,其内容记为ValueB,代表值ValueB;
继续读取,直至读取第一无序队列的最后一个元素,其内容记为z;然后读取第二无序队列的第z个元素,其内容记为KeyZ,代表键KeyZ;其次读取第三无序队列的第z个元素,其内容记为ValueZ,代表值ValueZ;
由此实现键值系统的多级无序索引;
采用改进的二分查找法查找叶子节点中特定的键及其值,包括如下步骤:
2B1)假设第一无序队列共有k个元素,首先读取第一无序队列的第k/2个元素,记为c;
2B2)然后读取第二无序队列的第c个元素,其内容记为KeyC;
2B3)对比所述特定的键和KeyC;如果相等则找到;如果所述特定的键大于KeyC,那么继续查找k*3/4,如果所述特定的键小于KeyC,那么继续查找k/4;当找到或确认不存在时终止查找;
2B4)假设最终找到第二无序队列的第d个键为所述特定的键,则第三无序队列的第d个元素的内容即为所查找的所述特定的键对应的值;
由此实现键值系统的多级无序索引;
将所述改进的二分法用于对特定键的索引操作;将所述顺序法用于对特定范围键的索引操作;由此实现键值系统的多级无序索引。
2.如权利要求1所述多级无序索引方法,其特征是,步骤2)所述特定键的索引操作包括写操作SET、单键读操作GET和/或删操作DELETE;所述特定范围键的索引操作包括范围读操作SCAN。
3.如权利要求2所述多级无序索引方法,其特征是,利用所述多级无序索引方法实现写操作SET,具体执行如下步骤:
步骤1:为值ValueN分配全局唯一的键KeyN,KeyN为数字;
步骤2:由B+树的根节点起,逐层检索子节点,直至确定该键应存储的叶子节点,标记为叶子节点NodeK;在非叶子节点均按照有序的形式进行组织;
步骤3:在叶子节点NodeK中,执行如下操作:
步骤3.1:读取第一无序队列中的位图元素,得出节点存储的键的个数count,并且找到第x个元素为0;
步骤3.2:将位图中第x个元素由0修改为1,将键KeyN写入第二无序队列的第x元素,将值ValueN写入第三无序队列的第x元素;
步骤3.3:将x写入第一无序队列中第y个元素,原第y个元素及其之后元素的元素依次后移;元素y为对第二无序队列中的所有元素的排序后,键KeyN的顺序;
通过上述步骤,利用所述多级无序索引方法实现写操作SET。
4.如权利要求2所述多级无序索引方法,其特征是,值ValueN对应全局唯一的键KeyN,其中N为数字;利用所述多级无序索引方法实现单键读操作GET,具体执行如下步骤:
步骤1:读取一个键的值,键的编号为KeyN,其中N为数字;检索子节点,确定该键应存储的叶子节点,标记为叶子节点NodeK;
步骤2:读取第一无序队列中的位图元素,得出叶子节点NodeK存储的键的个数count;
步骤3:遍历第一无序队列中的所有count个元素,及其在第二无序队列中的相应键;
步骤4:假设在第一无序队列的第b1个元素的内容为c1,第二无序队列的第c1个键的内容恰好等于KeyN,则停止遍历;
步骤5:第三无序队列的第c1个元素的内容,记为ValueC1,将其作为读取结果反馈给调用程序;
步骤6:如果在步骤3中的遍历结束后仍未找到,则反馈给调用程序:该键值不存在;
步骤7:单键读操作结束。
5.如权利要求2所述多级无序索引方法,其特征是,利用所述多级无序索引方法实现范围读操作SCAN读取设定键范围为KeyN-KeyM的值,其中KeyN和KeyM为数字;具体执行如下步骤:
步骤1:从键值系统中所有键组织成的B+树的根节点起,逐层检索子节点,确定所述设定键范围的键应存储的叶子节点;最左侧的节点记为NodeX,中间的节点记为NodeY,最右侧的节点记为NodeZ;
步骤2:在叶子节点NodeX中,由后至前进行遍历,当遇到第一个不在所述设定键范围的键时即停止遍历,将已遍历的键和值记录在内存;
步骤3:在叶子节点NodeY中,由前至后进行遍历,将所有键和值记录在内存;
步骤4:在叶子节点NodeZ中,由前至后进行遍历,当遇到第一个不在所述设定键范围的键时即停止遍历,将已遍历的键和值记录在内存;
步骤5:将上述记录在内存中的键和值,反馈给应用程序。
6.如权利要求2所述多级无序索引方法,其特征是,利用所述多级无序索引方法实现删操作DELETE,具体执行如下步骤:
步骤1:假设删除键为KeyN的键值对,由B+树的根节点起,逐层检索子节点,直至确定该键应存储的叶子节点,标记为叶子节点NodeK;
步骤2:读取第一无序队列中的位图元素,得出叶子节点NodeK存储的键的个数count;
步骤3:遍历第一无序队列中的count个元素,及其在第二无序队列中的相应键, 遍历方法包括但不限于:顺序法、逆序法、二分查找法;
步骤4:若在第一无序队列的第b2个元素为c2,第二无序队列的第c2个元素的内容恰好等于KeyN,则停止遍历;
步骤5:在第三无序队列中,第c2个元素的内容,记为ValueC2,并删除第c2个元素;
步骤6:在第二无序队列中,将第c2个元素的内容KeyN删除;
步骤7:在第一无序队列中,将位图的第c2个位由1改为0;
步骤8:在第一无序队列中,将第b2个元素的内容删除,将第b2个元素之后的所有元素依次前移;
步骤9:删除操作结束。
7.一种实现权利要求1所述多级无序索引方法的多级无序索引系统,包括:第一存储器件和第二存储器件;将键值系统中所有的键组织成一棵B+树;其特征是:
A.第一存储器件用于存储B+树的非叶子节点;非叶子节点用于对键的索引,每一层非叶子节点均为有序的;
B.第二存储器件用于存储B+树的叶子节点;包括:第一无序队列、第二无序队列和第三无序队列;
B1.第一无序队列,包括位图元素和普通元素;位图元素以二进制方式呈现,各个位只能是1或0;某位是1代表第二无序队列对应的元素非空闲,某位是0时代表第二无序队列对应的元素是空闲;普通元素是无序的,通过普通元素可查找到在第二无序队列的元素序号;
B2.第二无序队列用于存储键;第二无序队列是无序的;
B3.值的第三无序队列;在第二无序队列中每一个非空的键均在值的第三无序队列中存储值。
8.如权利要求7所述的多级无序索引系统,其特征是,第一存储器件和第二存储器件分别采用相同或不同的存储器件;或第一存储器件、第二存储器件为同一个存储器件中划分的两个相互隔离的存储区域。
CN201910099393.9A 2019-01-31 2019-01-31 一种多级无序索引方法与系统 Active CN109933584B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910099393.9A CN109933584B (zh) 2019-01-31 2019-01-31 一种多级无序索引方法与系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910099393.9A CN109933584B (zh) 2019-01-31 2019-01-31 一种多级无序索引方法与系统

Publications (2)

Publication Number Publication Date
CN109933584A CN109933584A (zh) 2019-06-25
CN109933584B true CN109933584B (zh) 2021-04-02

Family

ID=66985342

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910099393.9A Active CN109933584B (zh) 2019-01-31 2019-01-31 一种多级无序索引方法与系统

Country Status (1)

Country Link
CN (1) CN109933584B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110674134B (zh) * 2019-09-16 2024-02-13 腾讯大地通途(北京)科技有限公司 一种地理信息数据存储方法、查询方法及装置
CN111367916B (zh) * 2020-03-04 2023-03-31 浙江大华技术股份有限公司 一种数据存储方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103544300A (zh) * 2013-10-31 2014-01-29 云南大学 一种云环境下可扩展存储索引结构的实现方法
CN104424204A (zh) * 2013-08-21 2015-03-18 华为技术有限公司 索引机制合并方法、搜索方法、装置及设备
CN104750708A (zh) * 2013-12-27 2015-07-01 华为技术有限公司 一种时空数据的索引建立方法、查询方法、装置及设备
CN105975587A (zh) * 2016-05-05 2016-09-28 诸葛晴凤 一种高性能的内存数据库索引组织与访问方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10337825A1 (de) * 2002-11-15 2004-06-03 Siemens Ag Verfahren zur Erzeugung eines Bitstroms aus einem Indizierungsbaum

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104424204A (zh) * 2013-08-21 2015-03-18 华为技术有限公司 索引机制合并方法、搜索方法、装置及设备
CN103544300A (zh) * 2013-10-31 2014-01-29 云南大学 一种云环境下可扩展存储索引结构的实现方法
CN104750708A (zh) * 2013-12-27 2015-07-01 华为技术有限公司 一种时空数据的索引建立方法、查询方法、装置及设备
CN105975587A (zh) * 2016-05-05 2016-09-28 诸葛晴凤 一种高性能的内存数据库索引组织与访问方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"通用R树的设计与实现";李慧;《万方数据》;20090821;全文 *

Also Published As

Publication number Publication date
CN109933584A (zh) 2019-06-25

Similar Documents

Publication Publication Date Title
US10642515B2 (en) Data storage method, electronic device, and computer non-volatile storage medium
US5497485A (en) Method and apparatus for implementing Q-trees
JP4669067B2 (ja) 動的フラグメントマッピング
JP5043820B2 (ja) 低冗長記憶システムで索引を行う方法
CN105117415B (zh) 一种优化的ssd数据更新方法
US20150058352A1 (en) Thin database indexing
US9606746B2 (en) Shiftable memory supporting in-memory data structures
US7565482B1 (en) Method and device for scalable multiple match extraction from search data
CN105320775A (zh) 数据的存取方法和装置
CN107153707A (zh) 一种针对非易失内存的哈希表构建方法及系统
CN109933584B (zh) 一种多级无序索引方法与系统
TW200401206A (en) Enhanced multiway radix tree and related methods
WO2004036589A1 (en) Virtual content addressable memory with high speed key insertion and deletion and pipelined key search
KR20170065374A (ko) 버킷 단위의 정렬을 기반으로 하는 해시 충돌 처리 방법
US6590898B1 (en) Method and apparatus for routing data packets
US8515976B2 (en) Bit string data sorting apparatus, sorting method, and program
US9292553B2 (en) Queries for thin database indexing
JP3850134B2 (ja) データ検索装置
US7870138B2 (en) File storage and retrieval method
US20210224240A1 (en) Augmentation to the succinct trie for multi-segment keys
JP6205386B2 (ja) 半導体装置及び情報書込/読出方法
CN108595508B (zh) 一种基于后缀数组的自适应索引构建方法及系统
EP1162546A2 (en) In-place memory management for FFT
KR101866697B1 (ko) 버킷 단위의 정렬을 기반으로 하는 해시 충돌 처리 방법
CN115633097B (zh) 一种访问控制列表acl压缩方法及装置

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