System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据存储,具体的涉及基于动态前缀的层级b+树算法、装置及计算机存储介质。
技术介绍
1、b+树数据库:以b+树数据结构来创建的数据库,是一种持久化数据库,能提供高效地写入/查询/更新/删除的能力。
2、磁盘存储领域,b+树数据库是一种支持高性能读写,并支持range查询的技术。b+树数据库存储数据时,key会写入到b+树的索引,而value会写入到内存某一块,同时会在适当时机写入到磁盘中。不同的key会在b+树上生成不同的节点,同一个key则只会使用同一个节点,在数据修改时更新value即可。当key的长度较大,而value较小的时候,磁盘空间大小主要取决于key的长度和key的数量。而此时如果有大量的key是有公共前缀时,这些大量有公共前缀的key写入到磁盘中,对磁盘的空间占用是显著的。
3、有鉴于此,特提出本专利技术专利。
技术实现思路
1、为了解决b+树在key较长且有大量公共前缀的key而value较小的时候,占用磁盘较大的问题,本专利技术提供基于动态前缀的层级b+树算法、装置及计算机存储介质,具体地,采用了如下技术方案:
2、基于动态前缀的层级b+树算法,包括:
3、在进行kv数据写入操作时;
4、查询b+树数据库中各b+树的当前叶子节点,判断是否存在与新写入的kv数据的key具有相同前缀的叶子节点;
5、若判断结果为是,则针对具有相同前缀的叶子节点做节点变换操作,将具有相同前缀的叶子节
6、基于公共前缀节点生成新的b+树,存储具有相同前缀叶子节点的kv数据和新写入的kv数据。
7、作为本专利技术的可选实施方式,本专利技术的基于动态前缀的层级b+树算法中,所述查询b+树数据库中各b+树的当前叶子节点,判断是否存在与新写入的kv数据的key具有相同前缀的叶子节点包括:
8、预设公共前缀节点中key的字节数为n;
9、获取新写入kv数据中key的前n位字节,查询b+树数据库中各b+树的当前叶子节点的前n位字节,进行比对;
10、若新写入kv数据的key的前n位字节与b+树中当前叶子节点的前n位字节相同,则b+树中存在与新写入的kv数据的key具有相同前缀的叶子节点;
11、可选地,所述的n≥8byte。
12、作为本专利技术的可选实施方式,本专利技术的基于动态前缀的层级b+树算法中,所述针对具有相同前缀的叶子节点做节点变换操作,将具有相同前缀的叶子节点变换为公共前缀节点包括:
13、所述公共前缀节点的key存储叶子节点中的key与新写入kv数据中的key的相同前缀字节部分,所述公共前缀节点存储的value为key的相同前缀字节部分所对应的value;
14、可选地,若key的相同前缀字节部分所对应的value不存在,则公共前缀节点存储的value为0。
15、作为本专利技术的可选实施方式,本专利技术的基于动态前缀的层级b+树算法中,所述基于公共前缀节点生成新的b+树,存储具有相同前缀叶子节点的kv数据和新写入的kv数据包括:
16、基于所述公共前缀节点生成新的b+树;
17、所述新的b+树具有新的根节点,所述具有相同前缀叶子节点基于新的根节点创建新的叶子节点,新的叶子节点的key为除去相同前缀字节后剩余字节部分,value为相同前缀叶子节点的原value;
18、新写入的kv数据基于新的根节点创建叶子节点,叶子节点的key为除去相同前缀字节后剩余字节部分,叶子节点的value为kv数据的value。
19、作为本专利技术的可选实施方式,本专利技术的基于动态前缀的层级b+树算法,包括:
20、在进行kv数据写入操作时;
21、查询b+树数据库中各b+树是否存在与新写入kv数据的key前n位字节相同的公共前缀节点,若存在,则将新写入的kv数据直接存储在公共前缀节点下的b+树中,若不存在,则将新写入的kv数据存储在非公共前缀节点下的b+树对应的叶子节点上。
22、作为本专利技术的可选实施方式,本专利技术的基于动态前缀的层级b+树算法,包括:
23、在进行数据查询操作时;
24、判断查询key的字节长度是否大于等于n;
25、若判断结果为否,则递归查询b+树数据库中第0层b+树的分支节点/叶子节点,并返回查询结果,若判断结果为是,则查询b+树数据库中是否存在与查询key具有相同前缀的公共前缀节点,并基于公共前缀节点下的b+树进行查询,返回查询结果。
26、作为本专利技术的可选实施方式,本专利技术的基于动态前缀的层级b+树算法,包括:
27、若判断查询key的字节长度小于n,则递归查询b+树数据库中第0层b+树的分支节点,若分支节点查询成功,则通过分支节点定位到叶子节点,则将查询到的叶子节点的value数据返回,若分支节点查询失败,则返回查询失败;
28、若判断查询key的字节长度大于等于n,则根据查询key的前n个字符查询是否存在公共前缀节点:若存在公共前缀节点,则判断查询key除去前n个字符后的剩余字符的长度是否为0,若判断结果为是,则返回公共前缀节点对应的value,若判断结果为否,则根据查询key除去前n个字符后的剩余字符部分继续递归查询公共前缀节点下b+树中的分支节点/叶子节点,并返回查询结果;
29、若不存在公共前缀节点,则返回递归查询查询b+树数据库中第0层各b+树的所有叶子节点分支节点/叶子节点,并返回查询结果。
30、作为本专利技术的可选实施方式,本专利技术的基于动态前缀的层级b+树算法,包括:
31、在进行数据删除操作时;
32、根据删除key通过查询操作查询b+树数据库中各b+树的对应节点;
33、如果查询的节点是叶子节点,则删除该叶子节点,然后做b+树的平衡;
34、如果查询的节点是公共前缀节点下b+树的叶子节点,则删除该叶子节点,并检查对应的公共前缀节点下b+树包含的元素数目,如果大于等于2则不操作,如果小于2,则将该公共前缀节点变换调整为所属b+树的叶子节点。
35、本专利技术同时提供一种基于动态前缀的层级b+树装置,包括:
36、数据写入模块,在进行kv数据写入操作时;
37、查询模块,查询b+树数据库中各b+树的当前各叶子节点,判断是否存在与新写入的kv数据的key具有相同前缀的叶子节点;
38、公共前缀节点模块,若判断结果为是,则针对具有相同前缀的叶子节点做节点变换操作,将具有相同前缀的叶子节点变换为公共前缀节点,若判断结果为否,则将新写入的kv数据存储在对应b+树的叶子节点上,基于公共前缀节点生成新的b+树,存储具有相同前缀叶子节点的kv数据和新写入的kv数据。
39、本专利技术同本文档来自技高网...
【技术保护点】
1.基于动态前缀的层级B+树算法,其特征在于,包括:
2.根据权利要求1所述的基于动态前缀的层级B+树算法,其特征在于,所述查询B+树数据库中各B+树的当前叶子节点,判断是否存在与新写入的KV数据的key具有相同前缀的叶子节点包括:
3.根据权利要求2所述的基于动态前缀的层级B+树算法,其特征在于,所述针对具有相同前缀的叶子节点做节点变换操作,将具有相同前缀的叶子节点变换为公共前缀节点包括:
4.根据权利要求3所述的基于动态前缀的层级B+树算法,其特征在于,所述基于公共前缀节点生成新的B+树,存储具有相同前缀叶子节点的KV数据和新写入的KV数据包括:
5.根据权利要求2所述的基于动态前缀的层级B+树算法,其特征在于,包括:
6.根据权利要求2-5任意一项所述的基于动态前缀的层级B+树算法,其特征在于,包括:
7.根据权利要求6所述的基于动态前缀的层级B+树算法,其特征在于,包括:
8.根据权利要求6所述的基于动态前缀的层级B+树算法,其特征在于,包括:
9.基于动态前缀的层级B+树装置
10.一种计算机可读存储介质,其特征在于,存储有计算机可执行程序,所述计算机可执行程序被执行时,实现如权利要求1-8任意一项所述的基于动态前缀的层级B+树算法。
...【技术特征摘要】
1.基于动态前缀的层级b+树算法,其特征在于,包括:
2.根据权利要求1所述的基于动态前缀的层级b+树算法,其特征在于,所述查询b+树数据库中各b+树的当前叶子节点,判断是否存在与新写入的kv数据的key具有相同前缀的叶子节点包括:
3.根据权利要求2所述的基于动态前缀的层级b+树算法,其特征在于,所述针对具有相同前缀的叶子节点做节点变换操作,将具有相同前缀的叶子节点变换为公共前缀节点包括:
4.根据权利要求3所述的基于动态前缀的层级b+树算法,其特征在于,所述基于公共前缀节点生成新的b+树,存储具有相同前缀叶子节点的kv数据和新写入的kv数据包括:<...
【专利技术属性】
技术研发人员:洪定乾,徐锐波,幸福,卢文伟,刘方,
申请(专利权)人:北京云思智学科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。