[发明专利]一种内存数据库KV存储引擎索引的创建方法有效
申请号: | 202011201566.2 | 申请日: | 2020-11-02 |
公开(公告)号: | CN112269786B | 公开(公告)日: | 2023-02-03 |
发明(设计)人: | 梁波;孙思清;张炜刚;贾德星;张晖;高传集 | 申请(专利权)人: | 浪潮云信息技术股份公司 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/23;G06F16/2458;G06F16/27 |
代理公司: | 济南信达专利事务所有限公司 37100 | 代理人: | 郗艳荣 |
地址: | 250100 山东省济南市高*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 内存 数据库 kv 存储 引擎 索引 创建 方法 | ||
1.一种内存数据库KV存储引擎索引的创建方法,其特征在于:首先在CockroachDB数据库插入ART树,并在ART树的叶子节点增加双向链表,然后基于ART树获取大于某key的节点,并计算出待插入key值对应的插入位置,将待插入key值对应的节点插入到双向链表中,最后遍历Key值范围即可;
用curnode变量表示当前处理节点,用leaf表示记录封装到新建的叶子节点,所述ART树插入流程,包括以下步骤:
第一步,将curnode变量设为ART树根节点;
第二步,将curnode变量指向节点加锁,判断curnode变量指向节点中是否存在key值的相应子节点,即curnode变量指向节点所在层数作为key值的byte数组下缀,得到的byte值在该节点是否有指针;
第三步,如果curnode变量指向节点所在层数与key值byte数组长度一致,先将curnode变量指向节点加锁,将leaf挂载到curnode变量指向节点相应的子节点指针位置,最后将curnode变量指向节点解锁,跳转到第六步;
第四步,如果curnode变量指向节点存在相应子节点,将curnode变量指向节点解锁的同时将curnode变量设为curnode变量指向节点对应的子节点,返回第二步;
第五步,如果curnode变量指向节点不存在相应子节点,先将curnode变量指向节点加锁,创建内部节点inode,并将inode节点挂载到curnode变量指向节点相应子节点指针位置,最后将curnode变量指向节点解锁的同时将curnode变量指向节点置为inode节点,返回第二步;
第六步,结束并返回。
2.根据权利要求1所述的内存数据库KV存储引擎索引的创建方法,其特征在于:所述双向链表按照CockroachDB定义的key排序规则进行排序,而不是基于字节序的排序规则。
3.根据权利要求1所述的内存数据库KV存储引擎索引的创建方法,其特征在于:所述ART树插入是在ART树上创建该记录对应的叶子节点,且ART树使用乐观锁机制,每次curnode变量指向节点解锁失败都返回第一步开始重新执行。
4.根据权利要求3所述的内存数据库KV存储引擎索引的创建方法,其特征在于:用curnode变量表示当前处理节点,ART树获取大于某key的节点算法,包括以下步骤:
第一步,将curnode变量设为ART树根节点;
第二步,将curnode变量指向节点以及curnode变量指向节点所在层数作为key值的byte数组下缀得到的byte值存入栈中,并将curnode变量指向节点加锁;
第三步,如果curnode变量指向节点为叶子节点,比较叶子节点key值与查询key值的大小,如果叶子节点key值大于查询key值,则解锁curnode变量指向节点并返回该叶子节点,流程结束;否则,跳转到第六步;
第四步,如果curnode变量指向节点所在层数与key值byte数组长度一致,则跳转到第六步;
第五步,判断curnode变量指向节点中是否存在key值的相应前缀,即curnode变量指向节点所在层数作为key值的byte数组下缀,得到的byte值;
如果curnode变量指向节点存在相应前缀,将curnode变量指向节点解锁的同时将curnode变量设为curnode变量指向节点对应的子节点,返回第二步;
如果curnode变量指向节点不存在相应前缀,将curnode变量指向节点以及curnode变量指向节点所在层数作为key值的byte数组下缀得到的byte值存入栈中,解锁curnode变量指向节点;
第六步,从栈中弹出curnode变量指向节点和byte值,并将curnode变量指向节点加锁;
第七步,在curnode变量指向节点中查找大于该byte值的子节点,如果没有找到,则curnode变量指向节点解锁并返回第八步;如果找到,则curnode变量指向节点解锁的同时将curnode变量设为curnode变量指向节点的该子节点;
第八步,判断curnode变量指向节点是否为叶子节点,若是,则返回该叶子节点,流程结束;若不是,则返回第七步。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮云信息技术股份公司,未经浪潮云信息技术股份公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011201566.2/1.html,转载请声明来源钻瓜专利网。