CN109407978B - 高并发索引b+链表数据结构的设计与实现方法 - Google Patents
高并发索引b+链表数据结构的设计与实现方法 Download PDFInfo
- Publication number
- CN109407978B CN109407978B CN201811129622.9A CN201811129622A CN109407978B CN 109407978 B CN109407978 B CN 109407978B CN 201811129622 A CN201811129622 A CN 201811129622A CN 109407978 B CN109407978 B CN 109407978B
- Authority
- CN
- China
- Prior art keywords
- data structure
- node
- linked list
- leaf
- array
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Abstract
本发明公开了一种高并发索引B+链表数据结构的设计与实现方法,该方法包括:同时使用基于数组的和基于元素得到数据结构;对于数据结构的非叶子节点,采用预设的B+树数据结构,置放于DRAM中,使位于DRAM上的非叶子节点保证访问的局部性;对于数据结构的叶子节点,采用单向链表数据结构,置放于NVM中,使位于NVM上的叶子节点避免排序和平衡的开销。该方法使用基于数组的数据组织形式和基于元素的数据组织形式、链表数据结构构建索引数据结构的叶子节点、B+树数据结构构建索引数据结构的内部节点、跳表数据结构去除排序和平衡的操作,可以实现无锁并发机制和有效空间管理,并保证高效的并发访问性能和快速的系统恢复。
Description
技术领域
本发明涉及非易失性主存存储技术领域,特别涉及一种高并发索引B+链表数据结构的设计与实现方法。
背景技术
非易失性主存(Non-Volatile Memory,NVM)是一种新型的内存存储介质,具有可字节寻址、掉电后信息非易失、存储密度高、不需要动态刷新、静态功耗低等优点。同时,也存在一些不足之处,如读写性能不对称,有限的写次数和写功耗较高等缺点。它的出现对存储领域带来了新的巨大机遇和挑战,引发了产业界和学术界对异构混合内存体系架构及其相关系统软件的研究热潮。非易失性内存对计算机系统结构、系统软件、软件库以及应用程序都有很多新的启示。非易失性内存设备可以与现有的动态随机存取存储器(DynamicRandom Access Memory,DRAM)设备共同构成混合主存,其中应用程序中临时性的数据存储在DRAM上,而把需要持久保存的数据存储在NVM上。非易失主存的出现促使研究人员着手设计基于主存的存储系统,包括文件系统和数据库系统。
传统的索引数据结构如B+树,在NVM新型介质上面临着新的挑战,如高的写入延迟,有限的并发性和空间的低利用率等问题。导致这些问题的原因主要在于传统的B+树,对节点的组织仍然采取基于数组的结构,采用这种结构导致的排序和平衡等方面的问题使得写代价较高,这种代价在需要额外维持故障一致性的情况下,将会变得更大并因此会导致较大的写放大开销。其次,粗粒度的数组结构会以整体为粒度进行锁定,高开销的排序和平衡操作会进一步地增加持有一个锁的持续时间,该开销将会在较大的NVM介质写延迟上体现地更加明显。
另外,一些针对NVM进行优化的数据结构,将会导致版本元素的多版本垃圾和树节点利用率过低,会导致严重的空间利用率的问题。同时,针对NVM的内存分配器也会带来一定的性能下降。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本发明的目的在于提出一种高并发索引B+链表数据结构的设计与实现方法,该方法可以内部地去除排序和平衡的操作,并且实现无锁的并发机制和有效的空间管理。
为达到上述目的,本发明一方面实施例提出了一种高并发索引B+链表数据结构的设计与实现方法,包括以下步骤:同时使用基于数组的和基于元素得到数据结构;对于所述数据结构的非叶子节点,采用预设的B+树数据结构,并置放于DRAM中,以使位于所述DRAM上的非叶子节点保证访问的局部性;对于所述数据结构的叶子节点,采用单向链表数据结构,并置放于NVM中,以使位于所述NVM上的叶子节点避免排序和平衡的开销。
本发明实施例的高并发索引B+链表数据结构的设计与实现方法,通过使用基于数组的数据组织形式和基于元素的数据组织形式,使用链表数据结构构建索引数据结构的叶子节点,使用B+树数据结构构建索引数据结构的内部节点,使用跳表数据结构可以内部地去除排序和平衡的操作,并且实现无锁的并发机制和有效的空间管理,消除排序和平衡操作带来的持久化开销以及保证高效的并发访问性能,并实现快速的系统恢复。
另外,根据本发明上述实施例的高并发索引B+链表数据结构的设计与实现方法还可以具有以下附加的技术特征:
进一步地,在本发明的一个实施例中,粗粒度的所述B+树数据结构使用细粒度的闭锁和优化的并发控制,而细粒度的链表节点使用无锁的并发控制机制,同时通过镜像键和去中心的键计数器和并发的分割优化增强可扩展性。
进一步地,在本发明的一个实施例中,基于元素的数据结构以单个对象的粒度进行分配和释放,以通过原子性的指针操作避免因复杂的版本操作而造成的低空间利用率,并且所述基于数组的和基于元素的数据结构的每一个数组均有一个受限的键值对对数。
进一步地,在本发明的一个实施例中,所述链型数据结构为一个排序的链表,其右兄弟指针在B+链表的底层,每一个基于元素的指针只有一个键值对,其中,所述链表按照元素有序排列通过兄弟节点指针互相引用,同时叶子节点链表维持预设数量的节点数,其中,在发生异常时,通过位于所述NVM上的叶子构建位于所述DRAM上的内部节点,其方法是遍历叶子节点,以找出其对应的兄弟节点的相互关系,重新构建位于所述DRAM中的数据结构。
其中,基于数组的层次占据整个数据结构空间的比例根据LNG的大小得到。
进一步地,在本发明的一个实施例中,所述数据结构的每一个内部节点拥有一套预设的排序键序列,连续地保存操作数以保证高缓存命中率,以保证查找的平均时间复杂度为O(log n)。
进一步地,在本发明的一个实施例中,所述叶子节点在内部节点的最下层通过两个相邻的指针连接形成一个叶子节点组,每个叶子节点组有一个预设的大小LNG,当叶子节点组大小大于或者小于预设阈值时,将产生分裂或者合并,分裂或者合并操作只需要从上一层的内部节点增加或者删除一个键指针对。
进一步地,在本发明的一个实施例中,在连续的内存空间中分别独立存储键数组和子节点指针数组,以此减少从每一个节点中数据预取的量,其中,所述数据结构使用SIMD处理加速查询处理。
进一步地,在本发明的一个实施例中,所述数据结构采用差分的并发控制机制,其中,在基于数组的层面中使用基于锁的并发控制机制,并且在基于元素的层面中使用无锁并发控制机制,乐观的并发控制机制保证读不需要额外的锁机制。
进一步地,在本发明的一个实施例中,在所述基于数组的层面中,在并发的读和写之间采用所述乐观的并发控制机制,在所述基于元素的层面中,对于并发的写操作采用细粒度锁方法,使用一个插入和分割标志位标识该节点是否为插入节点或已被删除,同时根节点标识和叶子节点标识该节点是根节点还是叶子节点。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为根据本发明一个实施例的高并发索引B+链表数据结构的设计与实现方法流程图;
图2为根据本发明一个实施例的并发持久性B+链表的整体结构图;
图3为根据本发明一个实施例的中版本节点内部结构示意图;
图4为根据本发明一个实施例的中叶子节点内部结构示意图;
图5为根据本发明一个实施例的多线程恢复机制原理图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
下面参照附图描述根据本发明实施例提出的高并发索引B+链表数据结构的设计与实现方法。
图1是本发明一个实施例的高并发索引B+链表数据结构的设计与实现方法流程图。
如图1所示,该高并发索引B+链表数据结构的设计与实现方法包括以下步骤:
在步骤S101中,同时使用基于数组的和基于元素得到数据结构。
在步骤S102中,对于数据结构的非叶子节点,采用预设的B+树数据结构,并置放于DRAM中,以使位于DRAM上的非叶子节点保证访问的局部性。
在步骤S103中,对于数据结构的叶子节点,采用单向链表数据结构,并置放于NVM中,以使位于NVM上的叶子节点避免排序和平衡的开销。
进一步地,在本发明的一个实施例中,粗粒度的B+树数据结构使用细粒度的闭锁和优化的并发控制,而细粒度的链表节点使用无锁的并发控制机制,同时通过镜像键和去中心的键计数器和并发的分割优化增强可扩展性。
进一步地,在本发明的一个实施例中,基于元素的数据结构以单个对象的粒度进行分配和释放,以通过原子性的指针操作避免因复杂的版本操作而造成的低空间利用率,并且基于数组的和基于元素的数据结构的每一个数组均有一个受限的键值对对数。
进一步地,在本发明的一个实施例中,链型数据结构为一个排序的链表,其右兄弟指针在B+链表的底层,每一个基于元素的指针只有一个键值对,其中,链表按照元素有序排列通过兄弟节点指针互相引用,同时叶子节点链表维持预设数量的节点数,其中,在发生异常时,通过位于NVM上的叶子构建位于DRAM上的内部节点,其方法是遍历叶子节点,以找出其对应的兄弟节点的相互关系,重新构建位于DRAM中的数据结构。
其中,基于数组的层次占据整个数据结构空间的比例根据LNG的大小得到。
进一步地,在本发明的一个实施例中,数据结构的每一个内部节点拥有一套预设的排序键序列,连续地保存操作数以保证高缓存命中率,以保证查找的平均时间复杂度为O(log n)。
进一步地,在本发明的一个实施例中,叶子节点在内部节点的最下层通过两个相邻的指针连接形成一个叶子节点组,每个叶子节点组有一个预设的大小LNG,当叶子节点组大小大于或者小于预设阈值时,将产生分裂或者合并,分裂或者合并操作只需要从上一层的内部节点增加或者删除一个键指针对。
进一步地,在本发明的一个实施例中,在连续的内存空间中分别独立存储键数组和子节点指针数组,以此减少从每一个节点中数据预取的量,其中,数据结构使用SIMD处理加速查询处理。
进一步地,在本发明的一个实施例中,数据结构采用差分的并发控制机制,其中,在基于数组的层面中使用基于锁的并发控制机制,并且在基于元素的层面中使用无锁并发控制机制,乐观的并发控制机制保证读不需要额外的锁机制。
进一步地,在本发明的一个实施例中,在基于数组的层面中,在并发的读和写之间采用乐观的并发控制机制,在基于元素的层面中,对于并发的写操作采用细粒度锁方法,使用一个插入和分割标志位标识该节点是否为插入节点或已被删除,同时根节点标识和叶子节点标识该节点是根节点还是叶子节点。
具体地,本发明的实施例提出一种基于非易失性内存NVM和易失性内存DRAM混合主存存储系统进行优化的链表型数据结构,该数据结构优化后主要包括以下特征;
该数据结构包含两个层次,第一个层次是基于数组结构的非叶子节点层,存放在DRAM中,第二个层次是基于跳表数据结构的叶子节点层,存放在NVM中。基于跳表的叶子节点层有效地减少了数据结构的持久化操作,叶子节点层提供具有良好空间局部性和平衡性的搜索操作。其中,数据结构具体包括以下特征:
第一,基于元素的叶子节点层是一个排序的链表,该链表在数据结构底部使用右兄弟节点指针指向下一个节点,每一个基于元素的只包含一个键值对。具体地,该叶子节点称为Leaf Node(简称LN),对于叶子节点层,存放于NVM中,并保证此部分结构的一致性和持久性。
第二,基于数组的内部节点层是具有和B+树类似的结构,具体地,每一个基于数组的内部节点拥有一定数量的键值对,该内部节点称为Inner Node(简称IN),对于内部节点,存放于DRAM中,并在系统发生异常时采用恢复机制进行重新构建。其中,对于基于元素的内部节点层,采用右兄弟指针定位并查询其相邻的元素,CPU的原子写机制来支持原子的指针更新而同时不产生排序,并且每一个叶子节点包含固定的元素数,从而消除了平衡操作。
第三,利用内部节点的排序性来连续地存储操作数,以保证良好的缓存局部性,保证查找的平均时间复杂度为O(log n)。具体地,在两个连续的叶子节点之间,设置一个叶子节点组LNG,如果LNG的大小高于或低于设定阈值,则叶子节点组将会产生分裂或者合并,分裂或合并时,仅仅需要从上一层的内部节点上增加或者删除一个键指针对,在默认情况下一个LNG的大小为8。
第四,在连续的内存中存储键数组和孩子指针数组以降低从每个节点中预取的数据量。其中,该数据结构采用线性查找代替二分查找,并选取1024为键数组的大小。对基于数组的内部节点的查找,排序和平衡操作均是在连续的内存中进行,该数据结构使用SIMD机制来加速处理的过程,具体地,如在一个查找过程中,使用SIMD指令同时比较多个键的内容,以确定键的异同,在排序和平衡的情况下,同样对move指令使用SIMD机制进行加速。
本发明实施例是针对该数据结构设计的特有的并发机制,其中,该并发机制主要包括以下主要特征:
第一,该数据结构在接近叶子节点层的层次设计了一种基于元素的概率内部节点层,该内部节点层使用类似于跳表的基于概率的索引技术,并用右兄弟节点组织为基于概率的多个概率节点(PN)的链表,每一个概率节点拥有一个随机长度的跳表指针,以此构建多个有序的多层链表,在分配一个LN的过程中,跳表会选择性地跳过一些非目标的叶子节点加速查找的过程,从而达到接近与传统B+树O(log n)的查找速度。
第二,该数据结构采用差分的并发机制,具体地,在基于数组的内部节点层次采用基于锁的并发机制,在基于元素的叶子节点层次采用无锁的并发机制。对于基于锁的并发机制,采用乐观的并发控制方法,在多个并发的写进程和读进程之间,同时多个在写进程之间采用细粒度的锁机制,具体地,该数据结构对每一个节点设置一个计数器作为多个并发操作之间的信息沟通渠道,该机制可以保证对于读线程不需要锁的机制,在写线程对某个节点进行修改的时候,获得对该节点的修改锁,并将其版本位置为“脏”,在完成修改后,修改版本号并释放锁。对于读线程而言,在读取节点数据之前先获得节点的版本号,如果发现处于锁定状态或者版本不一致,读线程将会重试验证过程直至成功。
第三,基于元素的叶子节点层,每一个层级都是一个独立的链表结构,并使用CAS机制进行相关原子性操作。具体地,对于删除操作,一个节点通过相应的节点位被置为无效,实现逻辑性地删除,这将可以防止并发线程在被删除的节点完全执行完删除操作之前插入新的节点,当所有的删除完全物理性地执行完毕后,才会移除对其的全部引用。具体地,对于更新操作,如果是对已存在的键,直接原子性地修改其值的指针,如果是新加入的键,将会在叶子链表原子性地增加一个节点并将其链接到较高的层次中。具体地,对于查询操作,将在查询的过程中跳过已被逻辑标识为删除的节点,对于已经被删除的节点,设计一个垃圾回收器,以回收没有读线程读取的删除节点。
第四,差分并发控制机制的最大特征是整合了两种并发控制机制。一是LNG的遍历是从基于数组的层次到基于元素的层次,二是从一个LNG分割到LNG上,向其基于数组的父节点增加一个键指针,引发预定范围的LNG大小,三是引发删除持久化数据,该数据结构使用基于指针的原子操作保障一致性,从而避免因复杂的一致性方法带来的低空间利用率问题。
本发明实施例的数据结构设计了一种基于epoch的垃圾回收器,该垃圾回收器的作用是防止其他的读线程读到已经被物理性删除的节点。具体地,该垃圾回收器保留一个全局的epoch数量和三个垃圾节点链表,用于当线程进入或者离开关键区域的时候跟踪epoch数,并把空闲内存回收到垃圾节点链表中。其中,当执行基于epoch的回收时,找到被线程所见的最低的最大epoch数,并安全地回收垃圾节点链表。持久性的NVM内存,传统的持久性NVM分配器,因为在分配器和相关数据结构的部分引入了事务相关的机制来保证一致性,所以有高的分配与回收延迟,基于上述问题,该数据结构设计了基于epoch垃圾回收器的NVM持久性内存池。具体地,该数据结构从NVM分配器中一次性地分配较大的内存,该数据结构使用一个持久的链表来记录从NVM分配器中获得的较大的内存块的元数据,这些元数据用于在系统恢复的时候重建系统。该数据结构设计基于epoch的垃圾回收器,从而支持从垃圾节点链表安全地分配,支持安全地从垃圾节点链表分配。该数据结构只需要维持基于元素的叶子节点层的一致性即可。
本发明实施例的数据结构的多线程恢复机制,在系统重启或者发生异常的情况下,该数据结构需要在DRAM中重新构建基于数组的内部节点层。具体地,在系统正常启动的时候,该数据结构会把所有的易失的内部节点和垃圾回收器保证在位于NVM中的特定位置,接着将gFlag设为真,以表明所有的元数据均已经持久化。当系统重启的时候,恢复机制首先检查gFlag的值,如果为真,则将易失的内部节点和垃圾回收器从DRAM恢复到NVM中,并将gFlag的值反置,否则,将认为系统出现异常,则执行从叶子节点进行恢复的机制来恢复易失性部分。在系统发生异常的时候,具体地,该数据结构使用存储于NVM上的叶子节点来重构位于DRAM上的内部节点和持久性内存池,该过程采用离线的方式进行。为降低系统恢复的时间,该数据结构采用多线程的恢复机。
具体地,该数据结构使用一套持久化的追踪器来记录被追踪的叶子节点地址,并使用vFlag标识位来标识追踪者有效或者无效,追踪者随机地选择每10万个数据插入,并被在一个保存的NVM区域进行持久化,其中,还使用一个tFlag标识位来确定其是否被追踪者追踪,在删除一个被删除的节点前,追踪器将指向将要被重置的删除节点。在整个恢复过程中,有效的追踪者根据被追踪者的叶子节点,多个追踪者指向需要重置的被删除节点。在系统恢复的过程中,多个追踪者被指定到多个并发的线程中,每一个线程负责恢复整个内部节点层的一部分,并重新构建整个数据结构的一部分,在重构所有的部分后,再使用一个线程进行全局的整理,根据分配的持久区域链表,所有已分配和空闲的内存将被区分用来恢复位于易失性内存的垃圾回收器。
本发明实施例的高并发索引B+链表数据结构的设计与实现方法,采用B+树和跳表结合的组成结构,B+树是基于数组的节点数据结构,拥有良好的随机性能,但是其排序、平衡代价较大,在非易失性内存介质上并发性和空间利用率较差,跳表是基于元素的节点数据结构,可以提供更适用于非易失性内存介质的细粒度操作方法,但是其缓存的局部性较差。本发明实施例结合基于数组和基于元素的两种数据结构的特点,提出一种高并发的B+链表数据结构,在该数据结构中,叶子节点采用基于元素的组织方式来内部消除排序和平衡的代价,非叶子节点采用基于数组的组织方式来保持平衡查找和保持高水准的缓存局部性。其中,该数据结构采用多线程恢复机制在DRAM重建基于数组的非叶子节点,对B+链表采用基于锁和无锁的并发机制,并采用CAS操作来保证原子性,并且该数据结构采用基于epoch的垃圾回收器和降低非易失性内存的分配操作开销。
综上,接下来以具体实施例对本发明高并发索引B+链表数据结构的设计与实现方法进行详细说明。
如图2所示,本发明实施例的高并发索引B+链表数据结构的设计与实现方法主要分为三层:第一层是位于DRAM中的基于数组的内部节点层;第二层是位于NVM中的基于元素的概率内部节点层;第三层是基于元素的叶子节点层。在本发明实施例中,位于DRAM中的内部节点中有一个版本节点,若干个键节点以及固定数目的子节点指针。
其中,第二层是位于DRAM上的基于元素的概率内部节点,兄弟节点通过右指向指针连接,每一个基于元素的概率内部节点层子指针指向一个叶子节点,每一个叶子节点包含一个键值对和一个指向其兄弟节点的右指针。
如图3所示,本发明实施例的版本节点共有32个位,前六位分别为是否封锁,是否插入,是否分割,是否删除,是否根节点以及是否为叶子节点。从第7位到第13位为vinsert位,从第14到31位为vsplit位,最后一位为是否使用的标志位。
如图4所示,本发明实施例的数据结构共有64位,前62位为指向的兄弟节点的地址位,第63位为是否持久化标识位,第64位为是否删除标识位。在本发明实施例中,使用哨兵节点来链接基于数组的数据结构和基于元素的数据结构,从底部基于数组的节点,每一个子指针指向一个哨兵节点,该哨兵节点为一个LNG的开始节点,本发明实施例中为每一个哨兵节点指定一个相似内容的键值对内容。更进一步,该数据结构实施例中,每一个LNG在语义上与一个基于数组的节点相同,将会指定一个版本计数器执行LNG分割和移除的操作。
如图5所示,在本发明实施例恢复时候,多个线程分别负责一部分叶子节点层的恢复工作,每一个追踪者包括,LN_addr保存要追踪的叶子节点的地址,vFlag标识符标识该节点是否为有效或者无效,tFlag标识符标识该叶子节点是否被其他追踪者追踪,在删除一个被追踪节点之前,追踪者指向将被删除的被追踪者的将会被重置。在系统恢复过程中,有效的追踪者将会按照被追踪者的键值对顺序进行排序,每一个线程负责恢复整个数据结构的一部分,并独立在DRAM中重新构建基于数组的内部节点层,在整个数据结构的恢复都完成后,再使用一个独立的线程将DRAM中重建的内部节点层串联起来,构成完整的内部节点数据结构。
本发明实施例的高并发索引B+链表数据结构的设计与实现方法,通过使用基于数组的数据组织形式和基于元素的数据组织形式、链表数据结构构建索引数据结构的叶子节点、B+树数据结构构建索引数据结构的内部节点和跳表数据结构可以内部地去除排序和平衡的操作,并且实现无锁的并发机制和有效的空间管理,消除排序和平衡操作带来的持久化开销以及保证高效的并发访问性能,并实现快速的系统恢复。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (7)
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的大小得到。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811129622.9A CN109407978B (zh) | 2018-09-27 | 2018-09-27 | 高并发索引b+链表数据结构的设计与实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811129622.9A CN109407978B (zh) | 2018-09-27 | 2018-09-27 | 高并发索引b+链表数据结构的设计与实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109407978A CN109407978A (zh) | 2019-03-01 |
CN109407978B true CN109407978B (zh) | 2020-07-28 |
Family
ID=65465486
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811129622.9A Active CN109407978B (zh) | 2018-09-27 | 2018-09-27 | 高并发索引b+链表数据结构的设计与实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109407978B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110413612A (zh) * | 2019-07-02 | 2019-11-05 | 华中科技大学 | 一种基于混合索引的混合内存性能优化方法及系统 |
CN110569399B (zh) * | 2019-11-07 | 2020-03-06 | 四川新网银行股份有限公司 | 基于pinpoint日志的链路构建方法 |
CN110888886B (zh) * | 2019-11-29 | 2022-11-11 | 华中科技大学 | 一种索引结构及构建方法、键值存储系统及请求处理方法 |
CN111274456B (zh) * | 2020-01-20 | 2023-09-12 | 中国科学院计算技术研究所 | 基于nvm主存的数据索引方法及数据处理系统 |
CN111309258B (zh) | 2020-02-14 | 2021-10-15 | 苏州浪潮智能科技有限公司 | 一种b+树的存取方法、装置和计算机可读存储介质 |
CN111522814A (zh) * | 2020-04-14 | 2020-08-11 | 西云图科技(北京)有限公司 | 一种水务系统的信息管理方法 |
CN111651455A (zh) * | 2020-05-26 | 2020-09-11 | 上海交通大学 | 基于机器学习的高效并发索引数据结构 |
CN113626431A (zh) * | 2021-07-28 | 2021-11-09 | 浪潮云信息技术股份公司 | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统 |
CN116700635B (zh) * | 2023-08-09 | 2024-01-30 | 深圳市威科伟业电子科技有限公司 | 固态硬盘数据恢复方法及固态硬盘 |
CN117131050A (zh) * | 2023-08-28 | 2023-11-28 | 中国科学院软件研究所 | 面向工作负载和查询敏感性的基于磁盘的空间索引方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105930280A (zh) * | 2016-05-27 | 2016-09-07 | 诸葛晴凤 | 一种面向非易失性内存的高效的页面组织和管理方法 |
CN105975587A (zh) * | 2016-05-05 | 2016-09-28 | 诸葛晴凤 | 一种高性能的内存数据库索引组织与访问方法 |
CN107463447A (zh) * | 2017-08-21 | 2017-12-12 | 中国人民解放军国防科技大学 | 一种基于远程直接非易失内存访问的b+树管理方法 |
CN107885456A (zh) * | 2016-09-29 | 2018-04-06 | 北京忆恒创源科技有限公司 | 减少io命令访问nvm的冲突 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10496283B2 (en) * | 2016-01-22 | 2019-12-03 | Suraj Prabhakar WAGHULDE | Adaptive prefix tree based order partitioned data storage system |
-
2018
- 2018-09-27 CN CN201811129622.9A patent/CN109407978B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105975587A (zh) * | 2016-05-05 | 2016-09-28 | 诸葛晴凤 | 一种高性能的内存数据库索引组织与访问方法 |
CN105930280A (zh) * | 2016-05-27 | 2016-09-07 | 诸葛晴凤 | 一种面向非易失性内存的高效的页面组织和管理方法 |
CN107885456A (zh) * | 2016-09-29 | 2018-04-06 | 北京忆恒创源科技有限公司 | 减少io命令访问nvm的冲突 |
CN107463447A (zh) * | 2017-08-21 | 2017-12-12 | 中国人民解放军国防科技大学 | 一种基于远程直接非易失内存访问的b+树管理方法 |
Non-Patent Citations (1)
Title |
---|
外包数据中基于链表的B+树数据完整性检测算法研究;方睿等;《成都信息工程大学学报》;20160815;第31卷(第4期);第377-381页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109407978A (zh) | 2019-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109407978B (zh) | 高并发索引b+链表数据结构的设计与实现方法 | |
CN109407979B (zh) | 多线程持久性b+树数据结构设计与实现方法 | |
CN111309270B (zh) | 一种持久性内存键值存储系统 | |
US10496283B2 (en) | Adaptive prefix tree based order partitioned data storage system | |
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
US5204958A (en) | System and method for efficiently indexing and storing a large database with high data insertion frequency | |
EP3159810B1 (en) | Improved secondary data structures for storage class memory (scm) enabled main-memory databases | |
US20180011893A1 (en) | Hash index | |
US20100185703A1 (en) | Lock-free hash table based write barrier buffer for large memory multiprocessor garbage collectors | |
CN107315746B (zh) | 基于非易失性主存的高效事务文件系统构建方法 | |
Kim et al. | {ListDB}: Union of {Write-Ahead} logs and persistent {SkipLists} for incremental checkpointing on persistent memory | |
CN112597254B (zh) | 面向混合dram-nvm主存的联机事务型数据库系统 | |
CN111414134B (zh) | 面向持久内存文件系统的事务写优化框架的方法及系统 | |
CN111240588B (zh) | 一种持久性内存对象存储系统 | |
CN110515705B (zh) | 可扩展的持久性事务内存及其工作方法 | |
US20180004798A1 (en) | Read only bufferpool | |
CN109165321B (zh) | 一种基于非易失内存的一致性哈希表构建方法和系统 | |
Wang et al. | Persisting RB-Tree into NVM in a consistency perspective | |
CN111414320B (zh) | 基于日志文件系统的非易失内存构建磁盘cache的方法及系统 | |
CN113590612A (zh) | Dram-nvm混合索引结构的构建方法及操作方法 | |
Chen et al. | Design and implementation of skiplist-based key-value store on non-volatile memory | |
Nicolae | Scalable Multi-Versioning Ordered Key-Value Stores with Persistent Memory Support | |
Chen et al. | Design of skiplist based key-value store on non-volatile memory | |
Jin et al. | SAL-hashing: a self-adaptive linear hashing index for SSDs | |
Wang et al. | The concurrent learned indexes for multicore data storage |
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 |