基于SSD的Key-Value型本地存储方法及系统技术方案

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

【技术实现步骤摘要】

该专利技术涉及本地数据存储管理系统,尤其涉及基于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型系统使用全内存的架构,避免磁盘读写瓶颈来获得极高的性能。但在实际应用中,这种系统只被用来作为数据库的前端缓存,难以成为数据的最终落脚之处。内存型数据库的局限之处在于放置在内存中的数据容易在系统崩溃等意外中丢失,安全性得不到保障,另外内存的价格和能耗依然远高于磁盘,出于数据访问的二八原贝U,将其全部放置于内存不符合经济方面的考量,将冷数据放置在磁盘等二级存储可以做 到不大幅降低性能的同时降低系统的整体成本。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型本地存储方法,所述步骤I包括步骤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页级写缓存的设计使用环形队列的结构,整个环划分为writ本文档来自技高网
...

【技术保护点】

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

【专利技术属性】
技术研发人员:刘凯捷熊劲孙凝晖
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1