CN109933584B - 一种多级无序索引方法与系统 - Google Patents
一种多级无序索引方法与系统 Download PDFInfo
- 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
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所述的多级无序索引系统,其特征是,第一存储器件和第二存储器件分别采用相同或不同的存储器件;或第一存储器件、第二存储器件为同一个存储器件中划分的两个相互隔离的存储区域。
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)
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)
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)
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 |
-
2019
- 2019-01-31 CN CN201910099393.9A patent/CN109933584B/zh active Active
Patent Citations (4)
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)
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 |