当前位置: 首页 > 专利查询>北京大学专利>正文

一种多级无序索引方法与系统技术方案

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

【技术实现步骤摘要】
一种多级无序索引方法与系统
本专利技术涉及大数据处理技术及存储索引
,尤其涉及一种快速的多级无序索引方法与系统。
技术介绍
随着大数据时代的到来,键值系统(Key-Valuestoragesystem,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:确定某一范围的键应存储的叶子节点;具体地本文档来自技高网...

【技术保护点】
1.一种多级无序索引方法,在基于存储器件构建的键值系统中,将所有键组织成B+树,通过多级无序的叶子节点实现有序的索引;包括如下步骤:1)将所有键组织成一棵B+树;其中:非叶子节点用于对键的索引,每一层非叶子节点都是有序的;叶子节点用于存储所有键和值;叶子节点包括第一无序队列、第二无序队列和第三无序队列;第一无序队列包括位图元素和普通元素;在第二无序队列中每一个非空的键都会在第三无序队列中存储值;键和值成对关联出现;关联的键和值在第二无序队列和第三无序队列的元素序号相同;通过普通元素能够查找到键在第二无序队列的元素序号,以及值在第三无序队列中的元素序号;2)采用顺序法或改进的二分法对键进行快速索引,查找叶子节点中特定的键KeyP及其值,P为字母A~Z;将所述改进的二分法用于对特定键的索引操作;将所述顺序法用于对特定范围键的索引操作;由此实现键值系统的多级无序索引。

【技术特征摘要】
1.一种多级无序索引方法,在基于存储器件构建的键值系统中,将所有键组织成B+树,通过多级无序的叶子节点实现有序的索引;包括如下步骤:1)将所有键组织成一棵B+树;其中:非叶子节点用于对键的索引,每一层非叶子节点都是有序的;叶子节点用于存储所有键和值;叶子节点包括第一无序队列、第二无序队列和第三无序队列;第一无序队列包括位图元素和普通元素;在第二无序队列中每一个非空的键都会在第三无序队列中存储值;键和值成对关联出现;关联的键和值在第二无序队列和第三无序队列的元素序号相同;通过普通元素能够查找到键在第二无序队列的元素序号,以及值在第三无序队列中的元素序号;2)采用顺序法或改进的二分法对键进行快速索引,查找叶子节点中特定的键KeyP及其值,P为字母A~Z;将所述改进的二分法用于对特定键的索引操作;将所述顺序法用于对特定范围键的索引操作;由此实现键值系统的多级无序索引。2.如权利要求1所述多级无序索引方法,其特征是,步骤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;由此实现键值系统的多级无序索引。3.如权利要求1所述多级无序索引方法,其特征是,步骤2)采用改进的二分查找法查找叶子节点中特定的键KeyP及其值,包括如下步骤: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;由此实现键值系统的多级无序索引。4.如权利要求1所述多级无序索引方法,其特征是,步骤2)所述特定键的索引操作包括写操作SET、单键读操作GET和/或删操作DELETE;所述特定范围键的索引操作包括范围读操作SCAN。5.如权利要求4所述多级无序索引方法,其特征是,利用所述多级无序索引方法实现写操作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。6.如权利要求4所述多级无序索引方法,其特征是,值ValueN对应全局...

【专利技术属性】
技术研发人员:王平杨洪章屠要峰
申请(专利权)人:北京大学中兴通讯股份有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1