CN102722449B - 基于SSD的Key-Value型本地存储方法及系统 - Google Patents

基于SSD的Key-Value型本地存储方法及系统 Download PDF

Info

Publication number
CN102722449B
CN102722449B CN201210165053.XA CN201210165053A CN102722449B CN 102722449 B CN102722449 B CN 102722449B CN 201210165053 A CN201210165053 A CN 201210165053A CN 102722449 B CN102722449 B CN 102722449B
Authority
CN
China
Prior art keywords
page
write
node
module
ssd
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
Application number
CN201210165053.XA
Other languages
English (en)
Other versions
CN102722449A (zh
Inventor
刘凯捷
熊劲
孙凝晖
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Institute of Computing Technology of CAS
Original Assignee
Huawei Technologies Co Ltd
Institute of Computing Technology of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd, Institute of Computing Technology of CAS filed Critical Huawei Technologies Co Ltd
Priority to CN201210165053.XA priority Critical patent/CN102722449B/zh
Publication of CN102722449A publication Critical patent/CN102722449A/zh
Priority to PCT/CN2013/076222 priority patent/WO2013174305A1/zh
Application granted granted Critical
Publication of CN102722449B publication Critical patent/CN102722449B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开一种基于SSD的Key-Value型本地存储方法和系统,所述方法包括:步骤1,对于数据采用内存快照B+树索引结构,进行内存的读写分离操作;步骤2,经过索引后的数据,针对B+树使用FIFO队列管理缓存;步骤3,对所述数据进行读写操作,通过空洞文件机制在日志型追加写入的数据中实现逻辑页号和物理位置的映射管理。

Description

基于SSD的Key-Value型本地存储方法及系统
技术领域
该发明涉及本地数据存储管理系统,尤其涉及基于SSD(固态硬盘)的Key-Value(键值)型本地存储方法及系统。
背景技术
数据的组织管理主要分为三步,一是数据的在线存取,主要指的是获得数据和提供读取服务,即面向传统的OLTP型负载,二是数据的组织,传统上指的是将OLTP型数据库中的数据转为适合数据仓库的数据格式,即称为ETL的过程。三是数据分析,指的是进行长时间,复杂的数据挖掘等工作来发现数据中的联系和潜在价值,也就是OLAP型任务。本文中,我们关注的是数据的在线存取部分。
传统的方案中,满足数据在线存取任务的是以MySQL为代表的关系型数据库。关系型数据库是上世纪70年代的产物,产生伊始的主体架构沿袭至今。关系型数据库是数据存储管理发展史上的里程碑,其特点是擅长严格事务处理,提供数据安全性保障等。但对于大数据时代的新型负载,关系型数据库体现出了其固有的局限性:
其一,大数据负载的规模变化快,当新业务上线时,相关的数据量往往急速上升,而当业务调整时,数据量又可能会快速收缩,转移到别的业务上去。而在传统数据库面向的应用场景一般都是在比较静态的用户群体中进行,扩展和收缩会牵涉到数据库的分库分表操作。这些复杂的行为一是会耗费大量人力物力,二是可能导致相关业务的暂时下线,这是目前的互联网服务商很难接受的。
其二,大数据负载的形式变化快。传统的数据库在线事务处理中,一般面向的文书,报表等,都具有比较固定的格式内容,而正如上文已经提到的那样,现今面临的负载中,越来越多的却是没有固定范式,或者经常根据业务需要进行调整的的非结构化数据或半结构化数据。这种灵活性是传统的关系型数据库所不具备的。
其三,事务性支持的需求与以往有变化。传统关系型数据库都提供了严格的ACID事务支持,但目前来说这种事务支持从两个方面引起人们的重新考量。第一是因为现在以互联网应用为典型的新型业务需求中,相对来说对ACID的特性并没有严格遵循的需求,比如对于博客文章,相关评论,相册图片,甚至网上店铺的库存,暂时的不一致状态对于用户来说都是可以接受的。第二,严格的ACID特性限制使得数据库整体的性能和扩展性难以提高,这主要是复杂的锁机制,日志机制等造成的。
正是由于关系型数据库存在的这些问题,使得被称为NoSQL类型的新一代存储系统渐渐崛起,并被广为使用。NoSQL这个名称意味着它和关系型数据库有截然不同的地方,一般不再支持SQL语句的复杂功能,同时另一个重要区别的是大多数的NoSQL系统放弃了ACID的完整支持,它们的特点可以大致归纳如下:
因为放弃一些复杂的但是不实用的特性,NoSQL系统得以规避了很大一部分复杂的设计实现。
NoSQL系统可以提供明显高于传统数据库的数据吞吐能力。
具有良好的水平扩展能力,并适合运行在一般的廉价PC服务器硬件上。
Key-Value型存储系统固然具有这些优势,但数据负载的增长一直保持着迅猛的态势,同时也对存储系统层面造成越来越大的压力。我们可以看到,计算机硬件特别是CPU和内存容量一直保持着高速发展的态势,而作为持久化存储设备的硬盘的读写能力却一直都没有突破性的进展,这是由于磁盘的结构涉及到机械运动的本质决定的,随机读写中机械寻道动作造成的响应速度限制恐怕是传统磁盘结构中无法解决的问题。这样一来,随着计算速度快速提高,磁盘读写能力的瓶颈问题越来越突出。
有部分的Key-Value型系统使用全内存的架构,避免磁盘读写瓶颈来获得极高的性能。但在实际应用中,这种系统只被用来作为数据库的前端缓存,难以成为数据的最终落脚之处。内存型数据库的局限之处在于放置在内存中的数据容易在系统崩溃等意外中丢失,安全性得不到保障,另外内存的价格和能耗依然远高于磁盘,出于数据访问的二八原则,将其全部放置于内存不符合经济方面的考量,将冷数据放置在磁盘等二级存储可以做到不大幅降低性能的同时降低系统的整体成本。
SSD的出现有利于这个问题的解决,SSD存储介质相比较磁盘的优势和劣势都很明显,优势是随机读写性能大大提高,劣势是单位存储容量的成本大大高于磁盘。但从另一个角度来说,单位随机读写性能的成本SSD却比磁盘更低。所以在要求高随机IOPS(每秒读写请求响应数)的场景中,SSD有应用的价值,从实际情况来看,各大互联网公司已经开始在存储架构中大量使用SSD来提高系统的整体性能。但从SSD的特点来说,小粒度随机写的性能较差,而且从实测性能来看,FTL(闪存翻译层)的技术并无法完全解决这个问题。小粒度随机写造成性能下降的原因主要是:所以为了最大程度地发挥出SSD的性能优势,存储系统的读写模式需要针对其进行优化。
现有的同类系统中,Flashstore和FAWN等系统,利用的是Hash式数据索引的机制,这种索引方式主要存在两个问题,一是Hash式数据索引需要在内存占用量和硬盘读取次数之间做权衡,难以获得两者兼得的效果。二是Hash式数据索引难以实现范围查找的操作。
对于以Berkeley DB为代表的许多利用传统B+树索引机制的系统来说,在SSD上使用主要面临的问题其数据插入会造成大量的原地更新写入操作,这是不利于SSD性能的IO模式,另一方面,对于并发支持来说,B+树索引需要引入复杂的锁机制,不利于系统的整体性能。
而较晚出现的LSM-tree索引结构被应用在LevelDB等系统中,其优势在于写入模式为大粒度连续写,非常利于SSD的性能发挥,但LSM-tree作为一种倾向于写优化的机制,读操作因为引入的读硬盘次数较多,使得其性能较低。
综上所述,现有的Key-Value系统不能满足当前的应用需求,主要体现在以下两点:
第一,以锁机制为基础的并发控制技术难以满足高并发读写负载的要求;
第二,现有系统的写入模式不适应SSD的特性。
发明内容
为了应对非结构化数据的管理这一突出需求的问题,本发明实现一个面向高并发负载,基于SSD的Key-Value型本地存储方法及系统。
本发明公开一种基于SSD的Key-Value型本地存储方法,包括:
步骤1,对于数据采用内存快照B+树索引结构,进行内存中的读写分离操作;
步骤2,经过索引后的数据,针对B+树页面使用FIFO队列管理缓存;
步骤3,对所述数据页面追加写入SSD,通过空洞文件机制在日志型追加写入的数据中实现逻辑页号和物理位置的映射管理。
所述的基于SSD的Key-Value型本地存储方法,所述步骤1包括:
步骤21,根节点A为B+树根节点,如对首节点D做一次更新操作;首先将首节点D页面进行拷贝,拷贝的副本页面为首节点D’,然后在首节点D’页面中进行所需要的更新;
步骤22,进行完这个操作以后,需要对中间节点B中对首节点D’的索引也做更新,根据内存快照的原则,为了防止读写竞争,需要先对中间节点B进行拷贝,然后在副本中间节点B’中进行更新操作;依次操作,所述拷贝过程也在根节点A上发生;
步骤23,当整个更新操作完成时,形成了一棵以根节点A’为根节点的新B+树,根节点A’相比较A,指向B’的索引有变化,而其他索引仍然不变;
步骤24,中间节点B’更新了指向首节点D’的页面,其他索引没有变化。
所述的基于SSD的Key-Value型本地存储方法,所述步骤2包括:
步骤31,FIFO页级写缓存的设计使用环形队列的结构,整个环划分为write区域和read区域,write区域中为正在进行写操作,尚未提交的页面,read区域中为已经完成写操作并提交的页面,可以供读操作从缓存中获得;
步骤32,write指针指向write区域的末尾,该指针也是下一个写操作向写缓存申请新页面时装载的位置,在系统运行时,write指针位置不断获得新页面并沿着环形队列前移,同时完成写操作的页面提交为read区域,并由read指针指向新近提交的页面位置;
步骤33,在这个过程中,后台异步写入线程将以适合应用需求的速度将read区域依次持久化到SSD中,已经完成持久化的页面区域称为flush区域,一个flush指针指向下一个要做持久化的页面,flush区域为read区域的一部分,供write指针获得新页面的区域;
步骤34,在后台异步写入线程将相应页面写入SSD中的过程中,已经在环形队列中存在更新拷贝的页面属于冗余页面,不需要进行写入,本方法中将跳过该种页面,同时在SSD的数据文件中制造同样大小的文件空洞,该文件空洞不占用实际空间也不进行实际写入操作,但保持了逻辑页号和数据页面在文件中位移的对应关系。
所述的基于SSD的Key-Value型本地存储方法,所述步骤3读出操作包括:
步骤41,获得当前的B+树根节点,作为B+树索引查找的起点;读操作无需对页面进行加锁;
步骤42,对于包括根节点在内的中间节点页面进行页面内部的折半查找,取得正确的索引项,获得下一个需要进行查找的页面逻辑页号,这一查找过程直到获得叶子节点后终结;因为内存快照技术的使用,读操作无需对页面进行加锁;
步骤43,通过逻辑页号获得物理页面的操作通过调用内存池管理模块完成;内存池管理模块将该页号与FIFO队列中最小的页号相比较,判断是否在队列中,如果比最小页号大,也就是缓存命中的情况,直接返回内存池管理中的页面引用;
步骤44,如果没有命中缓冲,则需要分配额外页面空间,然后到SSD中读取;用逻辑页号获得SSD中的数据需要通过调用日志型数据管理模块的功能来完成;因为文件空洞机制的作用,日志型数据管理模块此时的任务非常简单,只需要用逻辑页号乘以页面大小,然后读取相应页面即可;
步骤45,最后在叶子节点页面中完成最终的Key-Value对查找,返回结果。
所述的基于SSD的Key-Value型本地存储方法,所述步骤3写入操作流程还包括:
步骤51,通过B+树的查找来确定要插入新数据记录的正确位置,获得当前的B+树根节点,作为B+树索引查找的起点;读操作无需对页面进行加锁;对于内存池管理模块中的FIFO环形队列Read Region的改变全部发生在写线程中,所以写线程本身对于页面缓存命中的判断就不需要进行加锁;
步骤52,完成查找正确插入位置的操作时,写线程将根节点到插入位置页面整条路径的页面压入一个栈结构中,该栈结构中除了保存指向对应页面的指针外,还保存了路径中的中间节点指向子节点的页内索引号;
步骤53,写入页面的过程将会依次弹出栈中页指针,这里使用内存快照的技术来避免加锁保护,对一个页面的修改,需要先调用内存池管理的接口来请求一个新的页面,然后将源页面的内容拷贝到新页面中,再进行修改操作;在随后弹出的父节点页面中,需要将原先指向子节点的索引页号修改为新的逻辑页号;
步骤54,父节点页面中,需要将原先指向子节点的索引页号修改为新的逻辑页号,这个修改也同样是利用内存快照完成;如果子节点发生了分裂,则还需要插入分裂点;
步骤55,当整个写操作完成后,进行提交,需要进行的操作是将已经完成写入或者更新的所有页面并入Read Region中,然后修改新的B+树根节点为当前的索引B+树根节点。
本发明还公开一种基于SSD的Key-Value型本地存储系统,包括:
内存快照B+树索引模块,用于对于数据采用内存快照B+树索引结构,进行内存中的读写分离操作;
内存池管理模块,用于经过索引后的数据,针对B+树页面使用FIFO队列管理缓存;
日志型数据管理模块,用于对所述数据页面追加写入SSD,通过空洞文件机制在日志型追加写入的数据中实现逻辑页号和物理位置的映射管理。
所述的基于SSD的Key-Value型本地存储系统,所述内存快照B+树索引模块包括:
首节点更新操作模块,用于根节点A为B+树根节点,如对首节点D做一次更新操作;首先将首节点D页面进行拷贝,拷贝的副本页面为首节点D’,然后在首节点D’页面中进行所需要的更新;
中间节点更新操作模块,用于进行完这个操作以后,需要对中间节点B中对首节点D’的索引也做更新,根据内存快照的原则,为了防止读写竞争,需要先对中间节点B进行拷贝,然后在副本中间节点B’中进行更新操作;依次操作,所述拷贝过程也在根节点A上发生;
更新完成模块,用于当整个更新操作完成时,形成了一棵以根节点A’为根节点的新B+树,根节点A’相比较A,指向B’的索引有变化,而其他索引仍然不变;
页面指向模块,用于中间节点B’更新了指向首节点D’的页面,其他索引没有变化。
所述的基于SSD的Key-Value型本地存储系统,所述内存池管理模块包括:
形成队列结构模块,用于FIFO页级写缓存的设计使用环形队列的结构,整个环划分为write区域和read区域,write区域中为正在进行写操作,尚未提交的页面,read区域中为已经完成写操作并提交的页面,可以供读操作从缓存中获得;
指针位置前移模块,用于write指针指向write区域的末尾,该指针也是下一个写操作向写缓存申请新页面时装载的位置,在系统运行时,write指针位置不断获得新页面并沿着环形队列前移,同时完成写操作的页面提交为read区域,并由read指针指向新近提交的页面位置;
持久化模块,用于在这个过程中,后台异步写入线程将以适合应用需求的速度将read区域依次持久化到SSD中,已经完成持久化的页面区域称为flush区域,一个flush指针指向下一个要做持久化的页面,flush区域为read区域的一部分,供write指针获得新页面的区域;
对应写入模块,用于在后台异步写入线程将相应页面写入SSD中的过程中,已经在环形队列中存在更新拷贝的页面属于冗余页面,不需要进行写入,本系统中将跳过该种页面,同时在SSD的数据文件中制造同样大小的文件空洞,该文件空洞不占用实际空间也不进行实际写入操作,但保持了逻辑页号和数据页面在文件中位移的对应关系。
所述的基于SSD的Key-Value型本地存储系统,所述日志型数据管理模块包括:
索引入口模块,用于获得当前的B+树根节点,作为B+树索引查找的起点;
获得索引项模块,用于对于包括根节点在内的中间节点页面进行页面内部的折半查找,取得正确的索引项,获得下一个需要进行查找的页面逻辑页号,这一查找过程直到获得叶子节点后终结;因为内存快照技术的使用,读操作无需对页面进行加锁;
调用内存池管理模块,用于通过逻辑页号获得物理页面的操作通过调用内存池管理模块完成;内存池管理模块将该页号与FIFO队列中最小的页号相比较,判断是否在队列中,如果比最小页号大,也就是缓存命中的情况,直接返回内存池管理模块中的页面引用;
分配页面空间模块,用于如果没有命中缓冲,则需要分配额外页面空间,然后到SSD中读取;用逻辑页号获得SSD中的数据需要通过调用日志型数据管理模块的功能来完成;因为文件空洞机制的作用,日志型数据管理模块此时的任务非常简单,只需要用逻辑页号乘以页面大小,然后读取相应页面即可;
完成查找模块,用于最后在叶子节点页面中完成最终的Key-Value对查找,返回结果。
所述的基于SSD的Key-Value型本地存储系统,所述日志型数据管理模块还包括:
插入位置模块,用于通过B+树的查找来确定要插入新数据记录的正确位置,获得当前的B+树根节点,作为B+树索引查找的起点;读操作无需对页面进行加锁;对于内存池管理模块中的FIFO环形队列Read Region的改变全部发生在写线程中,所以写线程本身对于页面缓存命中的判断就不需要进行加锁;
页面压入模块,用于完成查找正确插入位置的操作时,写线程将根节点到插入位置页面整条路径的页面压入一个栈结构中,该栈结构中除了保存指向对应页面的指针外,还保存了路径中的中间节点指向子节点的页内索引号;
页面修改模块,用于写入页面的过程将会依次弹出栈中页指针,这里使用内存快照的技术来避免加锁保护,对一个页面的修改,需要先调用内存池管理模块的接口来请求一个新的页面,然后将源页面的内容拷贝到新页面中,再进行修改操作;在随后弹出的父节点页面中,需要将原先指向子节点的索引页号修改为新的逻辑页号;
修改逻辑页号模块,用于父节点页面中,需要将原先指向子节点的索引页号修改为新的逻辑页号,这个修改也同样是利用内存快照完成;如果子节点发生了分裂,则还需要插入分裂点;
提交模块,用于当整个写操作完成后,进行提交,需要进行的操作是将已经完成写入或者更新的所有页面并入Read Region中,然后修改新的B+树根节点为当前的索引B+树根节点。
本发明的有益效果为:
1:内存快照B+树索引结构与基于FIFO(先入先出)队列页级缓存结合使用。
B+树索引是磁盘上存储数据常用索引机制,可以提供按页聚合有效减少读写次数,同时因为数据局部性方面的优势,相比较Hash类索引在范围检索上有更好的性能。但是,过去的基于磁盘的B+树索引,需要大量小粒度的就地更新操作(in place updates),这种读写模式是不合适SSD的。因为这样不仅写入性能低,而且加速SSD磨损。本发明采用内存快照技术,在内存中实现数据的读写分离,提高系统的读写并发度。而内存快照的特性使得使用FIFO缓存策略可以有效体现数据时间局部性的特点,免去额外的缓存替换算法,并且使得命中判断更加简单和快速。
2:追加写入数据与空洞文件相结合。
使用FIFO型缓存的换出页直接写入SSD中,不覆盖原有数据,使用的是追加的写入方式,利用标准输出库的用户态缓存聚合写粒度,实现大粒度写入的目的,并且由于追加写入的天然特性决定了适合实现数据一致性,可靠性。本发明使用不间断快照的技术保障数据的高可靠性,并提供高效的故障恢复机制。
但追加写入需要在写入时去除冗余数据,使得页面逻辑编号与实际位置不相对应,如果另外加一层映射管理势必增加了元数据负担和不一致的风险,本发明中利用文件系统本身具有的空洞文件机制,使得页面逻辑编号与实际位置建立起简单对应的关系,大大降低了数据放置的管理难度。
总的技术效果
系统利用内存快照B+树的数据索引结构可提供高读写并发性能。利用基于追加写入的IO模式,并使用文件空洞,不间断快照机制,可以提供适合SSD特性,并提供数据高可靠性的数据放置机制。
附图说明
图1为本发明系统整体存储组织架构;
图2为本发明页级写缓存结构图;
图3为本发明内存快照B+树示例说明;
图4为本发明LogManager工作原理示意图;
图5为本发明读出操作流程;
图6为本发明写入操作流程。
具体实施方式
下面给出本发明的具体实施方式,结合附图对本发明做出了详细描述。
(Tree Index)内存快照B+树索引模块:利用内存快照B+树技术,实现数据索引机制。
(Memory Pool)内存池管理模块:进行B+树页面的空间分配,缓存管理。
(Log Manager)日志型数据管理模块:对数据持久化功能进行具体的读写操作,并通过空洞文件机制实现逻辑页号和物理位置的映射管理。
内存快照B+树索引
B+树是数据库和文件系统中常用的数据索引结构,优点是保持存储数据稳定有序,插入和修改拥有较稳定的对数时间复杂度。本发明使用内存快照机制改进传统B+树数据索引机制来满足新的需求。
B+树的结构以页为单位,各个页为树结构中的节点。B+树种存在中间节点和叶子节点两类节点,中间节点由B+树根节点开始向下延伸,各个节点的页中记录子节点的页索引,根节点在B+树末端,根节点对应页中存放实际key-value数据。B+树节点页面的组织包括页头保持的页面元数据信息,已经页面其余部分保持的数据列表,其中叶子节点的数据列表为存储在系统中的Key-Value对,中间节点的数据列表存储Key-Index对,Index项指向该条记录指向的子节点页面,Key项保存该条记录指向的子页面中最小的Key作为子树的分离值。任意Key在B+树中的位置可以由根节点开始顺着分离值索引到叶子节点找到。随着Key-Value对的插入,某页面放满数据时会进行分裂操作,并加深B+树,这样来保证B+树的平衡性,提供稳定的插入和检索性能。
本小节将叙述如何利用内存快照技术来改进B+树索引结构,实现高并发特性。
图3展示了内存快照技术的运作机理。图中标明B+树的一部分,A节点为B+树根节点,现在需要对D节点做一次更新操作。则我们首先将D节点页面进行拷贝,拷贝的副本页面为D’,然后在D’页面中进行所需要的更新。进行完这个操作以后,需要对B中对D’的索引也做更新,那么根据内存快照的原则,为了防止读写竞争,也需要先对B进行拷贝,然后在副本B’中进行更新操作。依次类推,这个拷贝也在根节点A上发生了。
当整个更新操作完成时,形成了一棵以A’为根节点的新B+树,值得注意的是,A’相比较A来说,指向B’的索引有变化,而其他索引仍然不变。同样的,B’更新了指向D’的页面,其他索引没有变化,如图中的C页面,依然可由B’中的索引项找到。
若以A’页面为根节点则当前形成了一个新的B+树结构,当更新操作完成时,要提交该操作达到新的一致状态,只需要将存储系统索引的B+树索引根节点变更为A’节点即可。后续操作将从A’为起点进入B+树索引中,然后开始查找,当然可以成功地体现出对D页面的更新效果。而在提交A’成为新的B+树根节点之前,并发的读操作线程将从A节点页面进入到B+树索引中,它们进行的查找操作均不会受到在拷贝页面中进行的更新操作的影响,不会发生读写竞争。
上图中演示的是最简单的快照技术应用,实际中的情况要更为复杂。比如当对D页面的操作引发了页面分裂,则B’中不仅需要更新索引,还需要插入新的索引项。同样,对B’页面的插入操作也可能会造成B’页面的分裂,这种具体的情形和传统B+树操作的情况基本类似,也就不在此赘述。
总结而言,本章节阐述了内存快照技术在改进B+树索引结构并发性上的设计和实现,通过该技术的应用,使得处理读请求的线程不需要对索引中的数据结构进行加锁而可以做到直接访问,这种技术在读占优的负载中可以显著提高系统整体的并发性。
FIFO页缓存管理机制
本发明提出的缓存管理策略是面向内存快照B+树页面的,其本身具有负载特殊性。我们知道,在B+树索引结构中,所有的读写操作都需要从B+树的根节点页面进入索引结构,进行查找定位的工作。从这个特性可以看出,B+树中访问最频繁的恰恰是树结构中位于较高层次的节点页面。与内存快照技术相结合来看,每次的更新写入操作都会引起重新为对应的B+树路径上的页面分配新页面以进行拷贝操作。这种特点造成的结果是,经常处于B+树查找路径上的页面,也就是较高层次的页面,会经常因为被拷贝而出现在新分配的页面中。也就是说,在内存快照的B+树索引结构中,页面的分配顺序本身就体现出了很强的访问时间局部性特征。
在这种特征下,基于FIFO替换算法的缓存管理成为一种可能的选择。FIFO(First-In First-Out)算法,即是由一个先进先出的队列来对缓存页面的替换进行管理。每次分配新的页面时,都会将其放入FIFO队列中,队列满时,发生替换的原则就是选择队尾页面进行替换。这也就是实现了驻留缓存中的页面是新分配的页面,根据前一段中的论述,分配顺序体现了内存快照B+树索引页面的时间局部性。
FIFO页级写缓存的设计使用环形队列的结构,整个环划分为write区域和read区域,write区域中为正在进行写操作,尚未提交的页面,read区域中为已经完成写操作并提交的页面,可以供读操作从缓存中获得。write指针指向write区域的末尾,该指针也是下一个写操作向写缓存申请新页面时装载的位置,在系统运行时,write指针位置不断获得新页面并沿着环形队列前移,同时完成写操作的页面提交为read区域,并由一read指针指向新近提交的页面位置。在这个过程中,一个后台异步写入线程将以适合应用需求的速度将read区域依次持久化到SSD中,已经完成持久化的页面区域称为flush区域,一个flush指针指向下一个要做持久化的页面,flush区域为read区域的一部分,也是可以供write指针获得新页面的区域。
利用空洞文件机制的追加写
对于SSD来说,追加写入方式的优点主要是不会产生原地更新操作,以及容易进行大粒度聚合的写入。这可以更加充分地利用写入带宽,同时减少小粒度随机写类型的操作对于垃圾回收和数据碎片化带来的压力。所以追加写入方式是一种适合SSD特性的写入模式优化。
另外,Log-Structured日志型追加方式进行写入内存快照B+树这种解决方案可以保证B+树中的父节点页面总是要在子节点页面之后再进行写入。每次实际写入B+树的根节点,即表明一个完整而且一致的B+树索引结构以及被持久化到SSD中。在发生系统崩溃,而需要进行故障恢复的时候,只需要在日志型写入的数据文件中,找到最靠近末尾的B+树根节点,就可以顺利恢复一个全局一致的索引和数据结构。也就是说,我们通过一种不间断快照的手段,达到了数据高可靠的目的,避免了数据损坏的场景,而且使得故障恢复的时间与总数据集大小无关。
内存快照技术分配产生的所有内存页面如果全部由Log-Structured型写入持久化到SSD中,则会产生过多的冗余数据,使得SSD写入带宽的利用率过于低下。为了解决这一问题,我们在实际写入的时候对页面必须进行过滤。已经被快照的页面,也就是说更新的版本的版本存在于内存中,那么在一般情况下,就不需要将其写入到SSD中去。
在B+树型索引结构中,父节点页面对子节点页面的索引是由逻辑页号来表示的。对于内存快照B+树结构来说,逻辑页号就是页面分配的顺序编号,如果将所有分配的页面依次写入SSD,则页面在SSD上的物理位移与逻辑页号就建立了一种简单的一一对应关系,即可以由索引子节点页面的逻辑页面直接计算获得物理位移,冗余页面过滤的过程实际上也就跳过了部分分配的页面而没有将其真正写入,那么前文提到的分配页面的逻辑页号和写入SSD的物理位移之间的简单对应关系也就不存在了。那么我们必须要对这个对应关系进行一些额外的管理以使得可以顺利通过逻辑页号找到物理的页面位置。
我们提出利用文件系统空洞文件的支持来管理逻辑页号和实际物理位置的关系,大大降低了系统的实现和逻辑复杂度,并且通过对内核级功能支持的灵活运用,保证了实现的性能。
持久化写入的具体事项通过在页级缓存中运行的后台异步Flush线程完成,该线程持续将页面写入SSD。而根据内存快照的特性,每个提交的根节点都代表了一个一致的数据视图,只要确保将当前的B+树根节点Flush到SSD中,并记录下根节点所在位置,就相当于建立了一个数据快照。Flush线程需要跳过已被拷贝的页,这样的跳过使得逻辑的页编号与实际的页物理位置不相对应,故本系统中利用文件系统的空洞文件机制,跳过页面时写入空洞,保持了两者的对应的逻辑对应关系,这样就不必引入额外的页面映射管理层。页面索引号实际就是顺序写入SSD的序号,通过索引号的计算可以直接判断该页是否在写缓存中,如果没有命中(页框已经被写请求回收)则根据索引号可以找到该页在SSD中的位置,然后读取。
操作示例
1、后台异步写入线程的运行过程说明
图4显示图3中发生的写入操作在实际物理写入层面的视图。因为发生D页面的写入,拷贝生成3个新页面D’,B’,A’,按照分配的次序出现在右边的FIFO页面缓存队列中(实际上是用环形队列实现,这里做了简化,但不影响原理说明)。
后台有并发的异步写入线程会在FIFO队列上顺着页面分配顺序运行,将相应位置上的页面写入到SSD中去。
我们在写入A,B,D页面的时候,已经知道它们是冗余页面(已经被拷贝),不应该实际将其写入存储设备中。这里我们引入文件空洞的机制,检查到冗余页面时,虽然不进行数据写入,但是利用lseek系统调用在目前的Log-Structured数据文件末尾形成一个页面大小的文件空洞,依次类推,直到非冗余页面的时候,才真正写入数据。比如在例子中,后台Flush线程首先跳过D页面,形成一个页面大小的空洞,随后发现C页面是有效数据,就将其写入空洞之后,随后又需要跳过A和B页面,形成又一个空洞,大小为两个页面,随后的A’,B’,C’页面则正常进行写入。在这些页面分配的过程中,逻辑页号都是顺次递增分配的,在使用文件空洞机制之后,我们可以发现,所有页面还是可以由逻辑页号乘以页面大小产生的位移来直接进行访问,而实际写入文件的量却减少为4个页面,起到了过滤冗余写入的作用。
2、读出操作流程
读出记录操作指给定一个Key的情况下,存储系统返回该Key对应的Value(Key和Value均以字符串表示)。如图5,读操作的流程大致如下:
1、从系统获得出当前的B+树根节点,作为B+树索引查找的起点。因为前文所述的内存快照技术的运用,读操作无需对页面进行加锁。
2、对于包括根节点在内的中间节点页面进行页面内部的折半查找,取得正确的索引项,获得下一个需要进行查找的页面逻辑页号。这一查找过程直到获得叶子节点后终结。
3、通过逻辑页号获得物理页面的操作通过调用Memory Pool模块完成。Memory Pool模块将该页号与目前FIFO队列中最小的页号相比较,判断是否在队列中。如果比最小页号大,也就是缓存命中的情况,可以直接返回MemoryPool中的页面引用。
4、如果没有命中缓冲,则需要分配额外页面空间,然后到SSD中读取。用逻辑页号获得SSD中的数据需要通过调用Log Manager模块的功能来完成。因为文件空洞机制的作用,Log Manager模块此时的任务非常简单,只需要用逻辑页号乘以页面大小,然后读取相应页面即可。
5、最后在叶子节点页面中完成最终的Key-Value对查找,返回结果。
(3)写入操作流程
写入记录操作指的是将一个Key值和一个Value值以数据对的方式写入到存储系统中,供以后的读取。存储系统采用单写多读的线程模型,写线程进入索引结构时始终面对最新的B+树根节点,这点不同于读线程面对的情况。
如图6,写操作的流程大致如下:
1、写操作需要进行的第一步和读操作是一致的,是通过一次B+树的查找来确定要插入新数据记录的正确位置,所进行的操作与读操作基本一样,就不再赘述。有一点不同的是,因为对于Memory Pool模块中的FIFO环形队列ReadRegion的改变全部发生在写线程中,所以写线程本身对于页面缓存命中的判断就不需要进行加锁了。
2、完成查找正确插入位置的操作时,写线程将根节点到插入位置页面整条路径的页面压入一个栈结构中,该栈结构中除了保存指向对应页面的指针外,还保存了路径中的中间节点指向子节点的页内索引号。
3、写入页面的过程将会依次弹出栈中页指针,这里使用内存快照的技术来避免加锁保护,对一个页面的修改,需要先调用Memory Pool的接口来请求一个新的页面,然后将源页面的内容拷贝到新页面中,再进行修改操作。在随后弹出的父节点页面中,需要将原先指向子节点的索引页号修改为新的逻辑页号。
4、父节点页面中,需要将原先指向子节点的索引页号修改为新的逻辑页号,这个修改也同样是利用内存快照机制完成的。如果子节点发生了分裂,则还需要插入分裂点。
5、当整个写操作完成后,进行提交,需要进行的操作是将已经完成写入或者更新的所有页面并入Read Region中,然后修改新的B+树根节点为当前的索引B+树根节点。
本发明还公开一种基于SSD的Key-Value型本地存储系统,包括:
内存快照B+树索引模块,用于对于数据采用内存快照B+树索引结构,进行内存中的读写分离操作;
内存池管理模块,用于经过索引后的数据,针对B+树页面使用FIFO队列管理缓存;
日志型数据管理模块,用于对所述数据页面追加写入SSD,通过空洞文件机制在日志型追加写入的数据中实现逻辑页号和物理位置的映射管理。
所述的基于SSD的Key-Value型本地存储系统,所述内存快照B+树索引模块包括:
首节点更新操作模块,用于根节点A为B+树根节点,如对首节点D做一次更新操作;首先将首节点D页面进行拷贝,拷贝的副本页面为首节点D’,然后在首节点D’页面中进行所需要的更新;
中间节点更新操作模块,用于进行完这个操作以后,需要对中间节点B中对首节点D’的索引也做更新,根据内存快照的原则,为了防止读写竞争,需要先对中间节点B进行拷贝,然后在副本中间节点B’中进行更新操作;依次操作,所述拷贝过程也在根节点A上发生;
更新完成模块,用于当整个更新操作完成时,形成了一棵以根节点A’为根节点的新B+树,根节点A’相比较A,指向B’的索引有变化,而其他索引仍然不变;
页面指向模块,用于中间节点B’更新了指向首节点D’的页面,其他索引没有变化。
所述的基于SSD的Key-Value型本地存储系统,所述内存池管理模块包括:
形成队列结构模块,用于FIFO页级写缓存的设计使用环形队列的结构,整个环划分为write区域和read区域,write区域中为正在进行写操作,尚未提交的页面,read区域中为已经完成写操作并提交的页面,可以供读操作从缓存中获得;
指针位置前移模块,用于write指针指向write区域的末尾,该指针也是下一个写操作向写缓存申请新页面时装载的位置,在系统运行时,write指针位置不断获得新页面并沿着环形队列前移,同时完成写操作的页面提交为read区域,并由read指针指向新近提交的页面位置;
持久化模块,用于在这个过程中,后台异步写入线程将以适合应用需求的速度将read区域依次持久化到SSD中,已经完成持久化的页面区域称为flush区域,一个flush指针指向下一个要做持久化的页面,flush区域为read区域的一部分,供write指针获得新页面的区域;
对应写入模块,用于在后台异步写入线程将相应页面写入SSD中的过程中,已经在环形队列中存在更新拷贝的页面属于冗余页面,不需要进行写入,本系统中将跳过该种页面,同时在SSD的数据文件中制造同样大小的文件空洞,该文件空洞不占用实际空间也不进行实际写入操作,但保持了逻辑页号和数据页面在文件中位移的对应关系。
所述的基于SSD的Key-Value型本地存储系统,所述日志型数据管理模块包括:
索引入口模块,用于获得当前的B+树根节点,作为B+树索引查找的起点;
获得索引项模块,用于对于包括根节点在内的中间节点页面进行页面内部的折半查找,取得正确的索引项,获得下一个需要进行查找的页面逻辑页号,这一查找过程直到获得叶子节点后终结;因为内存快照技术的使用,读操作无需对页面进行加锁;
调用内存池管理模块,用于通过逻辑页号获得物理页面的操作通过调用内存池管理模块完成;内存池管理模块将该页号与FIFO队列中最小的页号相比较,判断是否在队列中,如果比最小页号大,也就是缓存命中的情况,直接返回内存池管理模块中的页面引用;
分配页面空间模块,用于如果没有命中缓冲,则需要分配额外页面空间,然后到SSD中读取;用逻辑页号获得SSD中的数据需要通过调用日志型数据管理模块的功能来完成;因为文件空洞机制的作用,日志型数据管理模块此时的任务非常简单,只需要用逻辑页号乘以页面大小,然后读取相应页面即可;
完成查找模块,用于最后在叶子节点页面中完成最终的Key-Value对查找,返回结果。
所述的基于SSD的Key-Value型本地存储系统,所述日志型数据管理模块还包括:
插入位置模块,用于通过B+树的查找来确定要插入新数据记录的正确位置,获得当前的B+树根节点,作为B+树索引查找的起点;读操作无需对页面进行加锁;对于内存池管理模块中的FIFO环形队列Read Region的改变全部发生在写线程中,所以写线程本身对于页面缓存命中的判断就不需要进行加锁;
页面压入模块,用于完成查找正确插入位置的操作时,写线程将根节点到插入位置页面整条路径的页面压入一个栈结构中,该栈结构中除了保存指向对应页面的指针外,还保存了路径中的中间节点指向子节点的页内索引号;
页面修改模块,用于写入页面的过程将会依次弹出栈中页指针,这里使用内存快照的技术来避免加锁保护,对一个页面的修改,需要先调用内存池管理模块的接口来请求一个新的页面,然后将源页面的内容拷贝到新页面中,再进行修改操作;在随后弹出的父节点页面中,需要将原先指向子节点的索引页号修改为新的逻辑页号;
修改逻辑页号模块,用于父节点页面中,需要将原先指向子节点的索引页号修改为新的逻辑页号,这个修改也同样是利用内存快照完成;如果子节点发生了分裂,则还需要插入分裂点;
提交模块,用于当整个写操作完成后,进行提交,需要进行的操作是将已经完成写入或者更新的所有页面并入Read Region中,然后修改新的B+树根节点为当前的索引B+树根节点。
本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。

Claims (8)

1.一种基于SSD的Key-Value型本地存储方法,其特征在于,包括:
步骤1,对于数据采用内存快照B+树索引结构,进行内存中的读写分离操作;
步骤2,经过索引后的数据,针对B+树页面使用FIFO队列管理缓存;
步骤3,对所述数据页面追加写入SSD,通过空洞文件机制在日志型追加写入的数据中实现逻辑页号和物理位置的映射管理;
其中,所述步骤1包括:
步骤21,根节点A为B+树根节点,对首节点D做一次更新操作:首先将首节点D页面进行拷贝,拷贝的副本页面为首节点D’,然后在首节点D’页面中进行所需要的更新;
步骤22,进行完这个操作以后,需要对中间节点B中指向首节点D’的索引也做更新,根据内存快照的原则,为了防止读写竞争,需要先对中间节点B进行拷贝,然后在副本中间节点B’中进行更新操作;依次操作,所述拷贝过程也在根节点A上发生;
步骤23,当整个更新操作完成时,形成了一棵以根节点A’为根节点的新B+树,根节点A’相比较A,指向B’的索引有变化,而其他索引仍然不变;
步骤24,中间节点B’更新了指向首节点D’的页面,其他索引没有变化。
2.如权利要求1所述的基于SSD的Key-Value型本地存储方法,其特征在于,所述步骤2包括:
步骤31,FIFO页级写缓存的设计使用环形队列的结构,整个环划分为write区域和read区域,write区域中为正在进行写操作,尚未提交的页面,read区域中为已经完成写操作并提交的页面,可以供读操作从缓存中获得;
步骤32,write指针指向write区域的末尾,该指针也是下一个写操作向写缓存申请新页面时装载的位置,在系统运行时,write指针位置不断获得新页面并沿着环形队列前移,同时完成写操作的页面提交为read区域,并由read指针指向新近提交的页面位置;
步骤33,在这个过程中,后台异步写入线程将以适合应用需求的速度将read区域依次持久化到SSD中,已经完成持久化的页面区域称为flush区域,一个flush指针指向下一个要做持久化的页面,flush区域为read区域的一部分,供write指针获得新页面的区域;
步骤34,在后台异步写入线程将相应页面写入SSD中的过程中,已经在环形队列中存在更新拷贝的页面属于冗余页面,不需要进行写入,本方法中将跳过该种页面,同时在SSD的数据文件中制造同样大小的文件空洞,该文件空洞不占用实际空间也不进行实际写入操作,但保持了逻辑页号和数据页面在文件中位移的对应关系。
3.如权利要求1所述的基于SSD的Key-Value型本地存储方法,其特征在于,所述步骤3读出操作包括:
步骤41,获得当前的B+树根节点,作为B+树索引查找的起点;读操作无需对页面进行加锁;
步骤42,对于包括根节点在内的中间节点页面进行页面内部的折半查找,取得正确的索引项,获得下一个需要进行查找的页面逻辑页号,这一查找过程直到获得叶子节点后终结;因为内存快照技术的使用,读操作无需对页面进行加锁;
步骤43,通过逻辑页号获得物理页面的操作通过调用内存池管理模块完成;内存池管理模块将该页号与FIFO队列中最小的页号相比较,判断是否在队列中,如果比最小页号大,也就是缓存命中的情况,直接返回内存池管理中的页面引用;
步骤44,如果没有命中缓存,则需要分配额外页面空间,然后到SSD中读取;用逻辑页号获得SSD中的数据需要通过调用日志型数据管理模块的功能来完成;因为文件空洞机制的作用,日志型数据管理模块此时的任务非常简单,只需要用逻辑页号乘以页面大小,然后读取相应页面即可;
步骤45,最后在叶子节点页面中完成最终的Key-Value对查找,返回结果。
4.如权利要求1所述的基于SSD的Key-Value型本地存储方法,其特征在于,所述步骤3写入操作流程还包括:
步骤51,通过B+树的查找来确定要插入新数据记录的正确位置,获得当前的B+树根节点,作为B+树索引查找的起点;读操作无需对页面进行加锁;对于内存池管理模块中的FIFO环形队列Read Region的改变全部发生在写线程中,所以写线程本身对于页面缓存命中的判断就不需要进行加锁;
步骤52,完成查找正确插入位置的操作时,写线程将根节点到插入位置页面整条路径的页面压入一个栈结构中,该栈结构中除了保存指向对应页面的指针外,还保存了路径中的中间节点指向子节点的页内索引号;
步骤53,写入页面的过程将会依次弹出栈中页指针,这里使用内存快照的技术来避免加锁保护,对一个页面的修改,需要先调用内存池管理的接口来请求一个新的页面,然后将源页面的内容拷贝到新页面中,再进行修改操作;在随后弹出的父节点页面中,需要将原先指向子节点的索引页号修改为新的逻辑页号;
步骤54,父节点页面中,需要将原先指向子节点的索引页号修改为新的逻辑页号,这个修改也同样是利用内存快照完成;如果子节点发生了分裂,则还需要插入分裂点;
步骤55,当整个写操作完成后,进行提交,需要进行的操作是将已经完成写入或者更新的所有页面并入Read Region中,然后修改新的B+树根节点为当前的索引B+树根节点。
5.一种基于SSD的Key-Value型本地存储系统,其特征在于,包括:
内存快照B+树索引模块,用于对于数据采用内存快照B+树索引结构,进行内存中的读写分离操作;
内存池管理模块,用于经过索引后的数据,针对B+树页面使用FIFO队列管理缓存;
日志型数据管理模块,用于对所述数据页面追加写入SSD,通过空洞文件机制在日志型追加写入的数据中实现逻辑页号和物理位置的映射管理;
其中,所述内存快照B+树索引模块包括:
首节点更新操作模块,用于根节点A为B+树根节点,对首节点D做一次更新操作:首先将首节点D页面进行拷贝,拷贝的副本页面为首节点D’,然后在首节点D’页面中进行所需要的更新;
中间节点更新操作模块,用于进行完这个操作以后,需要对中间节点B中指向首节点D’的索引也做更新,根据内存快照的原则,为了防止读写竞争,需要先对中间节点B进行拷贝,然后在副本中间节点B’中进行更新操作;依次操作,所述拷贝过程也在根节点A上发生;
更新完成模块,用于当整个更新操作完成时,形成了一棵以根节点A’为根节点的新B+树,根节点A’相比较A,指向B’的索引有变化,而其他索引仍然不变;
页面指向模块,用于中间节点B’更新了指向首节点D’的页面,其他索引没有变化。
6.如权利要求5所述的基于SSD的Key-Value型本地存储系统,其特征在于,所述内存池管理模块包括:
形成队列结构模块,用于FIFO页级写缓存的设计使用环形队列的结构,整个环划分为write区域和read区域,write区域中为正在进行写操作,尚未提交的页面,read区域中为已经完成写操作并提交的页面,可以供读操作从缓存中获得;
指针位置前移模块,用于write指针指向write区域的末尾,该指针也是下一个写操作向写缓存申请新页面时装载的位置,在系统运行时,write指针位置不断获得新页面并沿着环形队列前移,同时完成写操作的页面提交为read区域,并由read指针指向新近提交的页面位置;
持久化模块,用于在这个过程中,后台异步写入线程将以适合应用需求的速度将read区域依次持久化到SSD中,已经完成持久化的页面区域称为flush区域,一个flush指针指向下一个要做持久化的页面,flush区域为read区域的一部分,供write指针获得新页面的区域;
对应写入模块,用于在后台异步写入线程将相应页面写入SSD中的过程中,已经在环形队列中存在更新拷贝的页面属于冗余页面,不需要进行写入,本系统中将跳过该种页面,同时在SSD的数据文件中制造同样大小的文件空洞,该文件空洞不占用实际空间也不进行实际写入操作,但保持了逻辑页号和数据页面在文件中位移的对应关系。
7.如权利要求5所述的基于SSD的Key-Value型本地存储系统,其特征在于,所述日志型数据管理模块包括:
索引入口模块,用于获得当前的B+树根节点,作为B+树索引查找的起点;
获得索引项模块,用于对于包括根节点在内的中间节点页面进行页面内部的折半查找,取得正确的索引项,获得下一个需要进行查找的页面逻辑页号,这一查找过程直到获得叶子节点后终结;因为内存快照技术的使用,读操作无需对页面进行加锁;
调用内存池管理模块,用于通过逻辑页号获得物理页面的操作通过调用内存池管理模块完成;内存池管理模块将该页号与FIFO队列中最小的页号相比较,判断是否在队列中,如果比最小页号大,也就是缓存命中的情况,直接返回内存池管理模块中的页面引用;
分配页面空间模块,用于如果没有命中缓存,则需要分配额外页面空间,然后到SSD中读取;用逻辑页号获得SSD中的数据需要通过调用日志型数据管理模块的功能来完成;因为文件空洞机制的作用,日志型数据管理模块此时的任务非常简单,只需要用逻辑页号乘以页面大小,然后读取相应页面即可;
完成查找模块,用于最后在叶子节点页面中完成最终的Key-Value对查找,返回结果。
8.如权利要求5所述的基于SSD的Key-Value型本地存储系统,其特征在于,所述日志型数据管理模块还包括:
插入位置模块,用于通过B+树的查找来确定要插入新数据记录的正确位置,获得当前的B+树根节点,作为B+树索引查找的起点;读操作无需对页面进行加锁;对于内存池管理模块中的FIFO环形队列Read Region的改变全部发生在写线程中,所以写线程本身对于页面缓存命中的判断就不需要进行加锁;
页面压入模块,用于完成查找正确插入位置的操作时,写线程将根节点到插入位置页面整条路径的页面压入一个栈结构中,该栈结构中除了保存指向对应页面的指针外,还保存了路径中的中间节点指向子节点的页内索引号;
页面修改模块,用于写入页面的过程将会依次弹出栈中页指针,这里使用内存快照的技术来避免加锁保护,对一个页面的修改,需要先调用内存池管理模块的接口来请求一个新的页面,然后将源页面的内容拷贝到新页面中,再进行修改操作;在随后弹出的父节点页面中,需要将原先指向子节点的索引页号修改为新的逻辑页号;
修改逻辑页号模块,用于父节点页面中,需要将原先指向子节点的索引页号修改为新的逻辑页号,这个修改也同样是利用内存快照完成;如果子节点发生了分裂,则还需要插入分裂点;
提交模块,用于当整个写操作完成后,进行提交,需要进行的操作是将已经完成写入或者更新的所有页面并入Read Region中,然后修改新的B+树根节点为当前的索引B+树根节点。
CN201210165053.XA 2012-05-24 2012-05-24 基于SSD的Key-Value型本地存储方法及系统 Active CN102722449B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201210165053.XA CN102722449B (zh) 2012-05-24 2012-05-24 基于SSD的Key-Value型本地存储方法及系统
PCT/CN2013/076222 WO2013174305A1 (zh) 2012-05-24 2013-05-24 基于SSD的Key-Value型本地存储方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210165053.XA CN102722449B (zh) 2012-05-24 2012-05-24 基于SSD的Key-Value型本地存储方法及系统

Publications (2)

Publication Number Publication Date
CN102722449A CN102722449A (zh) 2012-10-10
CN102722449B true CN102722449B (zh) 2015-01-21

Family

ID=46948222

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210165053.XA Active CN102722449B (zh) 2012-05-24 2012-05-24 基于SSD的Key-Value型本地存储方法及系统

Country Status (2)

Country Link
CN (1) CN102722449B (zh)
WO (1) WO2013174305A1 (zh)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102722449B (zh) * 2012-05-24 2015-01-21 中国科学院计算技术研究所 基于SSD的Key-Value型本地存储方法及系统
CN102968381A (zh) * 2012-11-19 2013-03-13 浪潮电子信息产业股份有限公司 一种利用固态硬盘提高快照性能的方法
CN103902471B (zh) * 2012-12-28 2017-08-25 华为技术有限公司 数据缓存处理方法和装置
CN103135945B (zh) * 2013-03-25 2014-11-26 中国人民解放军国防科学技术大学 用于ssd的多通道动态读写调度方法
CN103135946B (zh) * 2013-03-25 2014-11-26 中国人民解放军国防科学技术大学 基于ssd的大规模存储系统中的文件布局方法
CN103197958B (zh) * 2013-04-01 2016-08-10 天脉聚源(北京)传媒科技有限公司 一种数据传输方法及系统与转发器设备
CN104252386B (zh) * 2013-06-26 2017-11-21 阿里巴巴集团控股有限公司 数据更新的加锁方法和设备
CN104424103B (zh) * 2013-08-21 2018-05-29 光宝科技股份有限公司 固态储存装置中高速缓存的管理方法
CN104915145B (zh) * 2014-03-11 2018-05-18 华为技术有限公司 一种降低LSM Tree写放大的方法和装置
CN104035729B (zh) * 2014-05-22 2017-02-15 中国科学院计算技术研究所 一种日志映射的块设备精简配置方法
CN105447059B (zh) * 2014-09-29 2019-10-01 华为技术有限公司 一种数据处理方法及装置
CN104461384B (zh) * 2014-11-28 2017-11-24 华为技术有限公司 一种数据写入方法及存储设备
CN104657500A (zh) * 2015-03-12 2015-05-27 浪潮集团有限公司 一种基于key-value键值对的分布式存储方法
CN106161503A (zh) * 2015-03-27 2016-11-23 中兴通讯股份有限公司 一种分布式存储系统中的文件读取方法及服务端
CN104809237B (zh) * 2015-05-12 2018-12-14 百度在线网络技术(北京)有限公司 LSM-tree索引的优化方法和装置
CN105117415B (zh) * 2015-07-30 2018-07-03 西安交通大学 一种优化的ssd数据更新方法
CN105138622B (zh) * 2015-08-14 2018-05-22 中国科学院计算技术研究所 用于lsm树存储系统的插入操作及负载的读取和合并方法
CN107491523B (zh) 2017-08-17 2020-05-05 三星(中国)半导体有限公司 存储数据对象的方法及装置
CN107678981A (zh) * 2017-08-24 2018-02-09 北京盛和大地数据科技有限公司 数据处理方法及装置
CN107832236B (zh) * 2017-10-24 2021-08-03 记忆科技(深圳)有限公司 一种提高固态硬盘写性能的方法
CN107798130B (zh) * 2017-11-17 2020-08-07 广西广播电视信息网络股份有限公司 一种分布式存储快照的方法
CN108052643B (zh) * 2017-12-22 2021-02-23 北京奇虎科技有限公司 基于LSM Tree结构的数据存储方法、装置及存储引擎
CN110109914A (zh) * 2018-01-16 2019-08-09 恒为科技(上海)股份有限公司 一种应用驱动的数据存储与索引方法
US11392544B2 (en) * 2018-02-06 2022-07-19 Samsung Electronics Co., Ltd. System and method for leveraging key-value storage to efficiently store data and metadata in a distributed file system
CN108509613A (zh) * 2018-04-03 2018-09-07 重庆大学 一种利用nvm提升加密文件系统性能的方法
CN108763572B (zh) * 2018-06-06 2021-06-22 湖南蚁坊软件股份有限公司 一种实现Apache Solr读写分离的方法和装置
CN110659154A (zh) * 2018-06-28 2020-01-07 北京京东尚科信息技术有限公司 一种数据处理方法和装置
CN109521959A (zh) * 2018-11-01 2019-03-26 西安交通大学 一种基于ssd-smr磁盘混合键值存储系统数据组织方法
CN109683811B (zh) * 2018-11-22 2020-05-19 华中科技大学 一种混合内存键值对存储系统的请求处理方法
CN110162525B (zh) * 2019-04-17 2023-09-26 平安科技(深圳)有限公司 基于b+树的读写冲突解决方法、装置及存储介质
CN110058969B (zh) * 2019-04-18 2023-02-28 腾讯科技(深圳)有限公司 一种数据恢复方法及装置
CN110716695A (zh) * 2019-09-12 2020-01-21 北京浪潮数据技术有限公司 一种节点日志的存储方法、系统、电子设备及存储介质
CN110764705B (zh) * 2019-10-22 2023-08-04 北京锐安科技有限公司 一种数据的读写方法、装置、设备和存储介质
CN110716923B (zh) * 2019-12-12 2020-03-17 腾讯科技(深圳)有限公司 数据处理方法、装置、节点设备及存储介质
CN111352860B (zh) * 2019-12-26 2022-05-13 天津中科曙光存储科技有限公司 一种Linux Bcache中的垃圾回收方法及系统
CN114625713A (zh) * 2020-12-10 2022-06-14 华为技术有限公司 一种存储系统中元数据管理方法、装置及存储系统
CN112784120B (zh) * 2021-01-25 2023-02-21 浪潮云信息技术股份公司 一种基于范围分片方式的kv内存数据库存储管理方法
CN113821476B (zh) * 2021-11-25 2022-03-22 云和恩墨(北京)信息技术有限公司 数据处理方法及装置
CN114579061B (zh) * 2022-04-28 2022-07-29 苏州浪潮智能科技有限公司 一种数据存储方法、装置、设备及介质
CN115793989B (zh) * 2023-02-06 2023-06-20 江苏华存电子科技有限公司 一种基于NAND的NVMe KV SSD数据管理方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6173174B1 (en) * 1997-01-11 2001-01-09 Compaq Computer Corporation Method and apparatus for automated SSD updates on an a-key entry in a mobile telephone system
CN102364474A (zh) * 2011-11-17 2012-02-29 中国科学院计算技术研究所 用于机群文件系统的元数据存储系统和管理方法
CN102402602A (zh) * 2011-11-18 2012-04-04 航天科工深圳(集团)有限公司 一种实时数据库的b+树索引方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102722449B (zh) * 2012-05-24 2015-01-21 中国科学院计算技术研究所 基于SSD的Key-Value型本地存储方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6173174B1 (en) * 1997-01-11 2001-01-09 Compaq Computer Corporation Method and apparatus for automated SSD updates on an a-key entry in a mobile telephone system
CN102364474A (zh) * 2011-11-17 2012-02-29 中国科学院计算技术研究所 用于机群文件系统的元数据存储系统和管理方法
CN102402602A (zh) * 2011-11-18 2012-04-04 航天科工深圳(集团)有限公司 一种实时数据库的b+树索引方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
《基于SSD的机群文件系统元数据存储系统》;陈卓 等;《计算机研究与发展》;20120104;第269-275页 *
Hyeontaek Lim, et al.《SILT:A Memory-Efficient, High-Performance Key-Value Store》.《Proceedings of the Twenty-Third ACM Symposium on Operating Systems Principles》.2011,第1-13页. *

Also Published As

Publication number Publication date
CN102722449A (zh) 2012-10-10
WO2013174305A1 (zh) 2013-11-28

Similar Documents

Publication Publication Date Title
CN102722449B (zh) 基于SSD的Key-Value型本地存储方法及系统
US8977597B2 (en) Generating and applying redo records
US20210149847A1 (en) Policy driven data placement and information lifecycle management
US11288252B2 (en) Transactional key-value store
CN110825748B (zh) 利用差异化索引机制的高性能和易扩展的键值存储方法
EP3170106B1 (en) High throughput data modifications using blind update operations
US8700674B2 (en) Database storage architecture
US10725995B2 (en) Automatically revising synopsis table structure
US10140189B2 (en) Database recovery and index rebuilds
Vo et al. Logbase: A scalable log-structured database system in the cloud
CN103458023B (zh) 分布式闪存存储系统
Graefe The five-minute rule twenty years later, and how flash memory changes the rules
US20160077744A1 (en) Deferred reference count update technique for low overhead volume metadata
CN105408895A (zh) 用于多个访问方法的无锁存、日志结构化的存储
US11100083B2 (en) Read only bufferpool
Petrov Database Internals: A deep dive into how distributed data systems work
US11221999B2 (en) Database key compression
US12007998B2 (en) Caching for disk based hybrid transactional analytical processing system
Amur et al. Design of a write-optimized data store
CN113590612A (zh) Dram-nvm混合索引结构的构建方法及操作方法
US11436256B2 (en) Information processing apparatus and information processing system
WO2011098118A1 (en) Data storage method
US20220382758A1 (en) Query processing for disk based hybrid transactional analytical processing system
KR101086392B1 (ko) Wal 기법에서 대용량 객체의 파손 회복 방법
Norheim How Flash Memory Changes the DBMS World

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: HUAWEI TECHNOLOGY CO., LTD.

Effective date: 20130121

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20130121

Address after: 100080 Haidian District, Zhongguancun Academy of Sciences, South Road, No. 6, No.

Applicant after: Institute of Computing Technology, Chinese Academy of Sciences

Applicant after: Huawei Technologies Co., Ltd.

Address before: 100080 Haidian District, Zhongguancun Academy of Sciences, South Road, No. 6, No.

Applicant before: Institute of Computing Technology, Chinese Academy of Sciences

C14 Grant of patent or utility model
GR01 Patent grant