[发明专利]高并发索引B+链表数据结构的设计与实现方法有效
申请号: | 201811129622.9 | 申请日: | 2018-09-27 |
公开(公告)号: | CN109407978B | 公开(公告)日: | 2020-07-28 |
发明(设计)人: | 舒继武;陆游游;胡庆达;刘昊 | 申请(专利权)人: | 清华大学 |
主分类号: | G06F3/06 | 分类号: | G06F3/06;G06F12/02 |
代理公司: | 北京清亦华知识产权代理事务所(普通合伙) 11201 | 代理人: | 张润 |
地址: | 10008*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 并发 索引 数据结构 设计 实现 方法 | ||
1.一种高并发索引B+链表数据结构的设计与实现方法,其特征在于,包括以下步骤:
同时使用基于数组的数据组织形式的和基于元素的数据组织形式得到数据结构;
对于所述数据结构的非叶子节点,采用预设的B+树数据结构,并置放于DRAM中,以使位于所述DRAM上的非叶子节点保证访问的局部性;以及
对于所述数据结构的叶子节点,采用单向链表数据结构,并置放于NVM中,以使位于所述NVM上的叶子节点避免排序和平衡的开销;
粗粒度的所述B+树数据结构使用细粒度的闭锁和优化的并发控制,而细粒度的链表节点使用无锁的并发控制机制,同时通过镜像键和去中心的键计数器和并发的分割优化增强可扩展性;
所述数据结构采用差分的并发控制机制,其中,在基于数组的数据组织形式层面中使用基于锁的并发控制机制,并且在基于元素数据组织形式的层面中使用无锁并发控制机制,乐观的并发控制机制保证读不需要额外的锁机制;
在所述基于数组的数据组织形式层面中,在并发的读和写之间采用所述乐观的并发控制机制,在所述基于元素的数据组织形式层面中,对于并发的写操作采用细粒度锁方法,使用一个插入和分割标志位标识该节点是否为插入节点或已被删除,同时根节点标识和叶子节点标识该节点是根节点还是叶子节点。
2.根据权利要求1所述的高并发索引B+链表数据结构的设计与实现方法,其特征在于,基于元素的数据结构以单个对象的粒度进行分配和释放,以通过原子性的指针操作避免因复杂的版本操作而造成的低空间利用率,并且所述基于数组的和基于元素的数据结构的每一个数组均有一个受限的键值对对数。
3.根据权利要求1所述的高并发索引B+链表数据结构的设计与实现方法,其特征在于,所述链表数据结构为一个排序的链表,其右兄弟指针在B+链表的底层,每一个基于元素的指针只有一个键值对,其中,所述链表按照元素有序排列通过兄弟节点指针互相引用,同时叶子节点链表维持预设数量的节点数,其中,在发生异常时,通过位于所述NVM上的叶子构建位于所述DRAM上的内部节点,其方法是遍历叶子节点,以找出其对应的兄弟节点的相互关系,重新构建位于所述DRAM中的数据结构。
4.根据权利要求1所述的高并发索引B+链表数据结构的设计与实现方法,其特征在于,所述数据结构的每一个内部节点拥有一套预设的排序键序列,连续地保存操作数以保证高缓存命中率,以保证查找的平均时间复杂度为O(log n)。
5.根据权利要求1所述的高并发索引B+链表数据结构的设计与实现方法,其特征在于,所述叶子节点在内部节点的最下层通过两个相邻的指针连接形成一个叶子节点组,每个叶子节点组有一个预设的大小LNG,当叶子节点组大小大于或者小于预设阈值时,将产生分裂或者合并,分裂或者合并操作只需要从上一层的内部节点增加或者删除一个键指针对。
6.根据权利要求1所述的高并发索引B+链表数据结构的设计与实现方法,其特征在于,在连续的内存空间中分别独立存储键数组和子节点指针数组,以此减少从每一个节点中数据预取的量,其中,所述数据结构使用SIMD处理加速查询处理。
7.根据权利要求4所述的高并发索引B+链表数据结构的设计与实现方法,其特征在于,基于数组的层次占据整个数据结构空间的比例根据LNG的大小得到。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811129622.9/1.html,转载请声明来源钻瓜专利网。