CN110347336A - 一种基于nvm与ssd混合存储结构的键值存储系统 - Google Patents
一种基于nvm与ssd混合存储结构的键值存储系统 Download PDFInfo
- Publication number
- CN110347336A CN110347336A CN201910497294.6A CN201910497294A CN110347336A CN 110347336 A CN110347336 A CN 110347336A CN 201910497294 A CN201910497294 A CN 201910497294A CN 110347336 A CN110347336 A CN 110347336A
- Authority
- CN
- China
- Prior art keywords
- data
- rangetab
- key
- key assignments
- layer
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- 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/061—Improving I/O performance
-
- 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]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于NVM与SSD混合存储结构的键值存储系统,属于数据存储技术领域。本发明提出NVM与SSD混合存储的键值存储系统,在NVM上使用多个RangeTab结构来组织LSM‑Tree的第0层键值数据,传统LSM‑Tree结构的0层中各SSTable键范围是无序的,且键范围允许重叠,合并时因为较大的键范围容易读写更多的数据量,增加合并操作的时延,而本发明在第0层使用RangeTab结构重新组织键值数据,将多个RangeTab映射到不同且互不重叠的键范围中,Memtable键值数据由键范围将键值数据写入相应的RangeTab结构中,以缩短该层结构数据的合并时延;通过适当增加RangeTab结构的数量来增大所有RangeTab的数据容量。在相邻层容量之比保持不变的条件下,本发明每层能够容纳更多的数据量,LSM‑Tree结构层数减少,系统合并的次数也会降低。
Description
技术领域
本发明属于数据存储技术领域,更具体地,涉及一种基于NVM与SSD混合存储结构的键值存储系统。
背景技术
使用LSM-Tree(日志结构合并树,LogStructuredMerged-Tree)作为存储引擎的有LevelDB、HBase与RocksDB等,该类数据存储引擎将写入的数据有序插入到内存中已排好序的跳表结构中,同时在内存中数据量达到足够多时就会将其批量写入持久化的存储介质,能为系统带来足够优秀的写性能,另外在向内存写入数据之前在持久化介质中追加写日志的操作可以保证数据的可靠性,防止系统断电时内存数据丢失等,但是LSM-Tree在将相邻层数据合并写到下层时存在较为明显的数据写放大问题。
针对LSM-Tree的键值系统存在数据写放大的问题,现有技术中,第一种是直接降低LSM-Tree的层次来降低系统的写放大,该方法虽然能够减少数据写入系统的整体写放大次数,但是也会使得相邻层的写放大系数逐渐增大,具体地,相邻层数据之间的合并时参与的数据量会变得异常庞大而无法控制,在写入键值数据库的数据量足够多时,系统的写入操作由于合并耗时过长而长时间阻塞。第二种是在不修改LSM-Tree结构的基础上对数据读写做些优化,比如使用多线程并行读取不同层的数据加快读操作以及使用新型的非易失存储介质(Non-VolatileMemory,NVM)与DRAM交替存储Memtable中的键值数据等,这些方法能够提升部分读写性能,而最终写放大系数仍然没有显著降低。第三种是使用NVM存储Memtable数据,例如NoveLSM方案中,使用NVM和DRAM两类存储介质轮流作为Memtable数据存储的介质,并且设置NVM中Memtable数据大小为4GB(默认DRAM的Memtable为64MB),这样可以降低系统因Memtable数据尚未写入固态硬盘(SolidStateDisk,SSD)而导致的阻塞时间。同时该方案对NVM介质中Memtable跳表结构进行了字节寻址访问的优化,提升数据写入的速度;为了提高读流程效率,使用双线程分别在Memtable和SSTable((SortedStringSSTable,有序字符串表))文件中并行查找数据。该方案通过增大NVM的容量来存储更多的Memtable数据,合并过程中L0层数据量明显高于下层SSTable文件的数据量,能够减少L0层合并的写放大比例,但是写入NVM的4GB键值数据会使得后续其它层合并的数据量骤增,系统写性能的曲线波动幅度更大,可能会导致系统更长的阻塞时间而无法对外提供正常服务。
发明内容
针对现有技术的缺陷,本发明的目的在于解决现有技术无法兼顾读写性能和降低系统写放大的技术问题。
为实现上述目的,本发明实施例提供了一种基于NVM与SSD混合存储结构的键值存储系统,所述键值存储系统采用LSM-Tree结构作为存储引擎,由上到下分为:
内存,负责存储上层应用插入或更新到键值存储系统的最新键值数据于表Memtable中,若Memtable大小达到第一阈值,将其转变成只读状态的表Immutable后,将其键值数据写入到NVM;
NVM,负责使用RangeTab结构来组织LSM-Tree结构L0层的键值数据,每个RangeTab结构容量大小相等,将各个RangeTab映射到不同且互不重叠的键范围,Immutable键值数据由键范围将键值数据写入相应的RangeTab结构中;若NVM中所有RangeTab结构的键值数据达到第二阈值,选取部分RangeTab结构与SSD中L1层中键范围有重叠的所有SSTable文件合并到L1层;
SSD,负责存储LSM-Tree结构L1层以及所有下层SSTable文件数据,若Li层SSTable文件数量达到第三阈值,将Li层的部分SSTable文件合并到Li+1层,i≥1。
具体地,所述RangeTab结构分成三部分:Metadata区、Index区与Data区;
Metadata区用于记录RangeTab的元数据;
Index区包含cur和seq,cur用于记录定位到Data区的索引信息,seq初始值为0,在RangeTab每次写入数据时其值自动累加1,而当键值数据全部合并到下层后其值又重新设置为0;
Data区只负责存储键值数据。
具体地,所述RangeTab结构分成三部分:Metadata区、Index区与Data区;
Metadata区用于记录RangeTab的元数据;
Index区包含cur和seq,cur用于记录定位到Data区的索引信息,seq初始值为0,在RangeTab每次写入数据时其值自动累加1,而当键值数据全部合并到下层后其值又重新设置为0;
Data区只负责存储键值数据。
具体地,所述Data区由多个物理地址相连的Chunk组成,每个Chunk记录着键值数据内容Chunkdata、数据的大小Chunksize、数量、相对偏移地址这些元数据信息,每个Chunk的Chunkdata内存储的所有键值对有序排列,然后依次记录每条键值对的相对偏移地址,最后记录该Chunk中键值对的数量。
具体地,使用哈希地址空间结构记录NVM上RangeTab结构存储的每个key的偏移地址,将含有足够多键值数据的每相邻若干个Chunk分成一组,以组为单位分批次构造哈希映射;查找某个Chunk内的键值对时使用哈希映射,在哈希地址空间中索引到键值数据的偏移地址,由偏移地址在Chunk结构中找到键值数据。
具体地,在Immutable键值数据写到NVM之前,将key前缀相同的多个键值对以Chunk结构组织起来,每个Chunk内按照key的大小有序排列,然后根据key的前缀映射到有相同前缀的RangeTab,并将数据追加写到该RangeTab的Data区内最后一个Chunk的末尾。
具体地,NVM上的数据合并到SSD上L1层时,选取部分RangeTab结构,具体如下:
(1)若存在某个RangeTab存储的数据量与该RangeTab容量的比值超过阈值β,则对这些RangeTab按照数据量与总容量的比值从高到低排序,依次从比值最高的RangeTab开始将数据合并到下层;
(2)对于那些数据量与容量的比值达到阈值α的RangeTab,计算各个RangeTab的数据量与相邻下层存在键范围重叠的SSTable数据量的比值,并选取其中比值最大的RangeTab参与合并;
(3)当所有RangeTab数据与容量比值的平均值大于μ,只考虑数据量与容量的比值小于α但均大于μ的RangeTab,随机选取键范围相邻且数据量尽可能多的多个RangeTab一起参与合并,且这些RangeTab总数据量与单个RangeTab容量比值不超过阈值γ;
(4)如果不满足前三个条件,则RangeTab不会触发合并,0<μ<α<β<1。
具体地,采用双缓存区结构,每个RangeTab在初始化分配Data区空间时,先分配一块物理空间,当一个缓冲区因为数据写满而进行合并流程时,动态分配一块同样大小的新物理空间,Chunk数据在新缓冲区完成写入过程,当合并流程结束后前一个缓冲区释放,只留下新缓冲区。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
1.本发明提出NVM与SSD混合存储的键值存储系统,在NVM上使用多个RangeTab结构来组织LSM-Tree的第0层键值数据,传统LSM-Tree结构的0层中各SSTable键范围是无序的,且键范围允许重叠,合并时因为较大的键范围容易读写更多的数据量,增加合并操作的时延,而本发明在第0层使用RangeTab结构重新组织键值数据,将多个RangeTab映射到不同且互不重叠的键范围中,Memtable键值数据由键范围将键值数据写入相应的RangeTab结构中,以缩短该层结构数据的合并时延;通过适当增加RangeTab结构的数量来增大所有RangeTab的数据容量。在相邻层容量之比保持不变的条件下,本发明每层能够容纳更多的数据量,LSM-Tree结构层数减少,系统合并的次数也会降低。
2..本发明将存储在NVM上RangeTab待查找的键值数据预先构造哈希索引以减少访问存储介质的次数,而存储在SSD上的键值数据仍以SSTable文件组织,其查找方式保持不变。哈希索引只需记录每个key以及该key在RangeTab结构的偏移地址,在查找时将哈希函数计算key后得出的哈希值作为在哈希地址空间的地址来读取key及偏移地址,就可得到key在NVM上的实际物理地址。RangeTab的哈希索引方式查找数据可以大量减少访问NVM的次数,加快查找效率,间接提升系统的读性能。
3.本发明在NVM中RangeTab合并时采用双缓存结构,能够降低系统写入阻塞的时延,为了减少合并写放大,优先选取写放大比例最低的RangeTab数据参与合并,以提升合并效率,进一步提升系统写性能。
附图说明
图1为本发明实施例提供的一种基于NVM与SSD混合存储结构的键值存储系统结构示意图;
图2为本发明实施例提供的RangeTab结构示意图;
图3为本发明实施例提供的Data结构示意图;
图4为本发明实施例提供的Chunk分组哈希映射过程示意图;
图5为本发明实施例提供的RangeTab的键范围映射过程示意图;
图6为本发明实施例提供的RangeTab双缓存结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明提供了一种基于NVM与SSD混合存储结构的键值存储系统,所述键值存储系统采用LSM-Tree结构作为存储引擎,由上到下分为:
内存,负责存储上层应用插入或更新到键值存储系统的最新键值数据于表Memtable中,若Memtable大小达到第一阈值,将其转变成只读状态的表Immutable后,将其键值数据写入到NVM;
NVM,负责使用RangeTab结构来组织LSM-Tree结构L0层的键值数据,将各个RangeTab映射到不同且互不重叠的键范围中,Memtable键值数据由键范围将键值数据写入相应的RangeTab结构中;若NVM中RangeTab结构的键值数据达到第二阈值,选取部分RangeTab结构与SSD中L1层中键范围有重叠的所有SSTable文件合并到L1层;
SSD,负责存储LSM-Tree结构L1层以及所有下层SSTable文件数据,若Li层SSTable文件数量达到第三阈值,将Li层的部分SSTable文件合并到Li+1层,i≥1。
内存(DRAM),负责存储上层应用插入或更新到键值存储系统的最新键值数据于表Memtable中,键值数据在DRAM中以跳表结构的形式有序组织。用户在将写入的键值对插入到Memtable之前,先将相应的log信息写入存储介质(NVM)上的日志文件,以便于系统断电后能够恢复内存中的键值数据。若Memtable大小达到第一阈值(RocksDB设置的默认值为64MB),将其转变成只读状态的表Immutable后,再也无法对其做任何的插入、删除或修改操作。然后将表Immutable的键值数据flush写到NVM。
本发明中存储介质采用NVM与SSD混合存储结构。
NVM,负责使用RangeTab结构来组织LSM-Tree结构L0层的键值数据,将各个RangeTab映射到不同且互不重叠的键范围中,Memtable键值数据由键范围将键值数据写入相应的RangeTab结构中;若NVM中RangeTab结构的键值数据达到第二阈值,选取部分RangeTab结构与SSD中L1层中键范围有重叠的所有SSTable文件合并到L1层。另外,NVM还负责存储预写式日志(WriteAheadLogging,WAL),键值存储系统在调用Put接口Put(key,value)向Memtable跳表内插入或更新键值数据之前,会先向NVM写入日志,防止机器发生如断电、宕机等故障而导致DRAM中Memtable数据丢失。通过预写式日志可以恢复DRAM跳表结构中的所有键值数据信息,而且使用NVM替代SSD存储WAL日志可以显著加快系统处理写请求的效率,提升系统对写请求的响应速度。
由于NVM存储介质具有比NAND寿命长,容量大,非易失存储以及接近于DRAM读写性能的优势,它能够替代DRAM、硬盘等存储设备。本发明选择比SSD的读写性能更好的非易失存储介质NVM,例如,相变存储器PCM,其具有非易失性、可长期保存数据、而且数据不需刷新等优点。
RangeTab结构
RangeTab结构负责组织、映射与存储键值数据,其结构如图2所示。
RangeTab结构分成三部分:Metadata区、Index区与Data区。
Metadata区用于记录RangeTab的元数据,例如,该RangeTab在NVM上占用的容量大小capacity、已使用物理空间大小usedsize与起始物理偏移地址Chunk-Ikeyrange等信息。
Index区cur记录着定位到Data区的索引信息,用于辅助获取待查找键值数据的偏移地址,而seq初始值为0,在RangeTab每次写入数据时其值自动累加1,而当键值数据全部合并到下层后其值又重新设置为0,在键值系统重新启动时可以比较seq值是否等于0来判断系统是否需要重新构建RangeTab结构。
Data区只负责存储键值数据,由多个物理地址相连的Chunk组成,如3所示,每个Chunk记录着键值数据内容Chunkdata及这些数据的大小Chunksize等元数据信息。Chunkdata内存储的所有键值对(keysize|key|valuesize|value)有序排列,然后依次记录每条键值对的相对偏移地址,最后记录该Chunk中键值对的数量。
在读取Chunk键值数据时,先获取该Chunk键值对的数量(KV项数量),然后依次读取并解析每个键值对的偏移地址(KV偏移地址),最后从解析后的地址中读取相应的键值数据。在后台线程将Immutable数据flush写到RangeTab之前,会先将待写入的若干个键值对在内存中以Chunk结构形式封装起来,封装完毕后再将整个Chunk的数据一次性追加写到RangeTab的Data区,并在操作结束后修改Metadata区的元数据信息。
单个RangeTab结构的数据容量接近SSTable文件的最大容量(64MB)时,性能最佳。第二阈值根据实际需要设置,取值范围为2GB-32GB。
哈希索引
在RangeTab的Data区中,每个Chunk包含若干条键值对,其内部的键值对有序排列。每个Chunk内部Chunkdata的键值数据部分都会对应着记录着其相对偏移地址的索引结构,每一条记录键值对相对偏移地址的索引结构大小固定,占8个字节。Metadata区记录着每次新写入Chunk的键范围,在RangeTab中根据key查找键值对时,需要从Metadata区获取该RangeTab中所有Chunk的键范围信息,通过比较待查找的key是否在相应的键范围内,得到可能存有key的所有Chunk集合。同时,为了保证最终查找到键值数据的正确性,需要从最新写入RangeTab的Chunk数据开始往前查找,避免出现查找到的key对应的value值为旧值或无效值的情况。
为了提升查找Chunk内键值对的效率,本发明设计哈希地址空间结构,记录每个key的偏移地址。在查找某个Chunk内的键值对时,只需要在哈希地址空间由哈希函数计算后得到的地址处获取到键值对所处的偏移地址值,然后根据该偏移地址在Chunk中读取对应待查找的键值数据。
读取键值对整个过程的时间复杂度为O(1),而原先在Chunk中需要经过二分查找法多次访问NVM并对比数据,以确定Chunk内待查找的键值对,该过程的时间复杂度为O(logN)。与二分查找法对比,使用哈希索引方式查找键值数据的偏移地址,能显著减少查找过程中访问NVM的次数,提升RangeTab键值数据的查找效率。
为了避免最糟糕情况导致RangeTab查找性能下降,本发明设计将含有足够多键值数据的每相邻若干个Chunk分成一组,以组而不是单个Chunk为单位来构造哈希索引,其哈希索引的构造方式如图4所示。每组Chunk内的每条键值对使用哈希函数计算key在哈希空间的位置L,该位置L所在的数据块内记录着键值对在Chunk内的偏移地址Addr,哈希函数计算公式可以用下式表示:
L=hash(key)%N
N代表键值对的个数,哈希地址空间大小等于该组若干个Chunk中所有键值对的数量,哈希函数映射产生地址冲突的key会暂存在冲突标记空间。一组Chunk中不同Chunk之间可能存在key相同的键值对,后写入RangeTab的Chunk键值数据相对来说较新些。因此在构造哈希地址空间时,计算key的哈希值从最先写入RangeTab的Chunk开始往后遍历键值对,哈希索引过程中在遇到相同key的情况下较新value的地址与较旧的地址出现冲突时,在哈希地址空间中用新键值对替换已存在的旧键值对;或者从最后写入RangeTab的Chunk开始遍历键值对,若当前正处理的key已经在哈希地址空间或冲突标记空间中存在,则直接跳过该键值对不作处理。
等一组Chunk的全部键值对哈希映射完成后,再处理冲突标记空间的数据。使用位图标识哈希地址空间每个数据块是否空闲或已被占用,将冲突标记空间中的第1~X个键值对依次存储在哈希地址空间的第1~X个空闲数据块中。在查找时,若key可能哈希映射到冲突标记空间,则在该冲突标记空间中使用二分查找法快速定位冲突标记空间中的key,另外依据键值对数量的不同选取合适的哈希函数也可以减少发生哈希冲突的次数。
键范围映射
L0层RangeTab准备合并时,会选取下层与该RangeTab的键范围存在重叠的所有SSTable文件参与合并。若L0层中实际参与合并的只有一个RangeTab,则合并的实际键范围会相对更宽些,下层会有更多的SSTable文件参与合并,在极端情况下甚至会选取下层所有SSTable文件。这样在将RangeTab相同数据量写到下层时,额外写入下层的数据量更多,系统前台线程处理请求的性能会进一步降低。本发明设计L0层使用多个RangeTab存储数据,每个RangeTab结构容量大小相同且不同RangeTab的键范围互不重叠,并分析多个RangeTab的设计相比单个RangeTab的优势以及如何影响系统写性能。
(1)单个RangeTab的设计在每次合并时键值数据的键范围可能变得很大,大多数情况下几乎能与下层所有SSTable文件的键范围发生重叠,也就更容易让下层所有SSTable文件都参与合并,进而使得合并时写放大对应的数据量骤增,系统在更长时间内发生阻塞而无法对外提供正常的读写服务。
(2)而多个RangeTab的设计,能够缩小每次参与合并RangeTab的键范围以减少下层存在键范围重叠的SSTable文件数量,继而减少合并过程涉及的数据量,降低系统前台线程处理请求的阻塞时延,使得系统写性能曲线表现得更加平稳。
(3)多个RangeTab的设计使得每次参与合并RangeTab的键范围相对较小,在每次合并到下层的数据量基本不变的情况下,增加了L0层容纳键值数据的容量。在相邻层写放大系数AF保持不变条件下,有效减少LSM-Tree结构的层数,降低系统数据的写放大比例与合并次数,提升系统的随机写性能。
内存Immutable的键值对写到NVM各个RangeTab时,为了尽可能让相邻的键值对分布在物理地址相邻的位置,本发明设计按照key前缀为RangeTab划分不同的键范围,保证写到相同RangeTab的每个Chunk内所有键值对均有相同的前缀。如图5所示,假设key的大小为16个字节,前缀占用前4个字节,由这前缀对应4个字节表示的区间范围确定了RangeTab的键范围。
在Immutable数据写到NVM之前,将key前缀相同的多个键值对以Chunk结构组织起来,然后根据key的前缀映射到有相同前缀的RangeTab,并将数据追加写到该RangeTab的Data区。
第一合并策略
RangeTab处于LSM-Tree结构的L0层,其数据合并到下层的次数占系统总合并次数的大部分。因此RangeTab的合并效率成为键值系统写性能的主要瓶颈之一。
当Immutable数据正准备向某个正在合并的RangeTab中flush写数据时,为了尽可能地减少RangeTab数据合并导致系统flush写入的阻塞时延,本发明方案针对合并策略提出了双缓存结构设计。预先为RangeTab分配两块大小相同的物理空间,在将该RangeTab某块物理空间存储的数据合并到下层过程中,flush写的数据则存储到另一块物理空间,能够避免flush写数据到RangeTab时发生阻塞的情况,同时降低了flush线程引起系统写请求阻塞的概率。
另外,合并策略还提出了RangeTab在哪些情况下可以触发合并以及如何选取RangeTab与下层SSTable数据参与合并的具体方案,以缩短由合并引起的Immutable数据flush写的阻塞时延。同时,当相同数据量合并到下层时,合并策略尽可能多地降低合并的写放大,提升合并效率。
双缓存结构
在某个RangeTab被选取参与合并流程的过程中,可能存在系统的flush线程准备向该RangeTab写入Chunk数据,一般情况下有两种处理方式:阻塞系统的flush线程直到该RangeTab所有数据的合并流程结束,或者临时在NVM上分配一块额外的物理空间,然后将待flush写的键值数据暂时写到该物理空间,等到RangeTab数据合并结束后,再将该物理空间的键值数据迁回到RangeTab。
对于前者,阻塞flush线程写入数据的做法虽然比较容易解决代码实现的问题,但是由于系统flush线程一直阻塞而无法完成数据flush写入流程,严重降低了系统前台线程处理请求的效率。而对于后者,额外分配一块物理空间暂存待写入的键值数据虽然能解决系统写入数据时引起阻塞的问题,但合并结束后再次将该键值数据迁回RangeTab的过程只会徒增不必要的数据迁移开销,降低flush线程flush写数据到RangeTab的效率。
为了解决这个问题,本发明采取双缓存结构,其结构设计如图6所示。每个RangeTab在初始化分配Data区空间时,预先分配原先两倍大小的物理空间,分别命名为buffer-1和buffer-2两个缓存区,RangeTab初始化时buffer-1和buffer-2均未存放任何Chunk数据,其状态设置为init_state。
当flush线程准备向RangeTab写Chunk数据时,由于buffer-1和buffer-2的状态均是init_state,因此需要先修改buffer-1状态为write_state,表明其当前状态可以存储Chunk数据,并将Chunk数据写入buffer-1;而当buffer-1剩余的物理空间快要耗尽时,其将由write_state状态转变成compaction_state,表明该块物理空间的数据将要或者正在合并,若此时有新的Chunk数据要flush写入该RangeTab,则不能继续写入buffer-1。此时若buffer-2状态为init_state则将其转换成write_state,只有当缓存区的状态为write_state才能将Chunk数据写入其对应的物理空间中,否则只能阻塞flush线程的写流程,直到存在某个缓存区的状态重新变为write_state。
参与合并的buffer-1或buffer-2在合并结束后,其状态由compaction_state变为init_state,只有当没有缓存区的状态为write_state,才需要将其中某一个缓存区的状态由init_state变成write_state。
本发明采用预先分配两块同等大小物理空间的缓存区结构,解决RangeTab数据合并过程中可能存在flush线程flush写数据到该RangeTab的系统阻塞问题。也可使用按需分配的方式,即只有在RangeTab需要额外缓存区空间时才会为其分配,而当其键值数据合并结束后就立刻回收对应的物理空间,该方法能有效节省NVM上RangeTab占用的物理空间。但是RangeTab处于LSM-Tree结构的最上层,在负载不断地向系统写入键值数据的过程中系统会频繁地触发合并,按需分配在实际需要该空间时才为其分配虽然在一定程度上能够节省NVM物理存储空间,但是在每次遇到需要分配大量物理空间的情况下可能会增加额外的时间开销,间接降低flush线程flush写数据的效率。考虑到分配大量物理空间带来的时间开销,本发明采取预先分配的方式为RangeTab结构分配相应的物理空间。
合并触发策略
合并选取的数据量过多时,可能会导致flush线程flush写数据与系统写数据的阻塞时延过长,系统写性能波动起伏过大。而合并数据量过少会导致合并次数增多,其存在两个劣势:一是每次针对少量数据的读写操作无法充分利用NVM的高I/O带宽;二是下层以SSTable文件为单位选取参与合并的键值数据,RangeTab合并的数据量较少并不会缩短实际合并时数据的键范围,反而可能会提高下层参与合并的SSTable文件数据的比例,进而提高该次合并操作的写放大比例。因此如何选择参与合并的数据,决定了本次合并的效率,间接影响系统的写性能。
本发明为每个RangeTab存储数据量占用物理空间的比例大小设有3个阈值:μ,α与β,且β>α>μ。
由上所述,本发明设计满足以下三个条件中的任意一个就可以触发RangeTab数据合并:
(1)存在某个RangeTab可用的物理空间快要耗尽,例如数据量比例超过β;
(2)所有RangeTab数据量占容量比例的平均值(或数据总量占总容量的比值)达到某个较高值α(α<β);
(3)当所有RangeTab数据量与容量比值的平均值(或数据总量与总容量的比值)达到某个较高值μ(μ<α)。
因此,RangeTab选取算法步骤如下:
(1)若存在某个RangeTab存储的数据量与该RangeTab容量的比值超过某个阈值β(β>α)例如90%时,则对这些RangeTab按照数据量与总容量的比值从高到低排序,依次从比值最高的RangeTab开始将数据合并到下层。其原因是这些RangeTab更容易阻塞flush线程写数据的流程,需要最优先处理;
(2)其次对于那些数据量与容量的比值达到阈值α的RangeTab,计算各个RangeTab的数据量与相邻下层存在键范围重叠的SSTable数据量的比值,并选取其中比值最大的RangeTab参与合并,以尽可能地减少该次合并实际的写放大;
(3)最后在所有RangeTab数据与容量比值的平均值大于μ时,这时只考虑数据量与容量的比值小于α但均大于μ(例如μ≥60%)的RangeTab(此时不存在比值大于α的RangeTab)。随机选取键范围相邻且数据量尽可能多的多个RangeTab一起参与合并,实际参与合并的RangeTab数量不能过多,以便合并的键范围始终保持在较小范围内。而且这些参与合并的RangeTab总数据量与单个RangeTab的容量上限之比不能超过阈值γ例如2,避免合并的数据量过大;
(4)如果不满足前三个条件,则RangeTab不会触发合并。
由RangeTab选取算法选择合适的RangeTab后,然后从下层选取键范围存在重叠的SSTable文件参与合并流程。该选取算法通过缩短合并数据的键范围以及减少合并实际涉及到的数据量,尽可能提升RangeTab数据量与下层SSTable的比值,降低LSM-Tree合并的写放大比例,提高合并效率,最终提升系统的写性能。
SSD,负责存储LSM-Tree结构L1中以及所有下层SSTable文件数据,若Li层SSTable文件数量达到第三阈值,将Li层的部分SSTable文件合并到Li+1层,i≥1。SSD层还负责存储其它如MANIFEST、CURRENT等记录键值系统配置信息相关的文件,而且所有合并过程中新创建的SSTable文件均存储在SSD。
将Li层的部分SSTable文件合并到Li+1层,具体包括:
1)读取Li层SSTable文件和Li+1层中与该SSTable键范围存在重叠的所有SSTable文件;
2)将这些读取的SSTable文件数据在内存中做归并排序;
3)将这些有序的数据以SSTable形式重新写入存储介质,而合并之前旧SSTable文件在合并结束后因为失效会被删除。
以上,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。
Claims (7)
1.一种基于NVM与SSD混合存储结构的键值存储系统,其特征在于,所述键值存储系统采用LSM-Tree结构作为存储引擎,由上到下分为:
内存,负责存储上层应用插入或更新到键值存储系统的最新键值数据于表Memtable中,若Memtable大小达到第一阈值,将其转变成只读状态的表Immutable后,将其键值数据写入到NVM;
NVM,负责使用RangeTab结构来组织LSM-Tree结构L0层的键值数据,每个RangeTab结构容量大小相等,将各个RangeTab映射到不同且互不重叠的键范围,Immutable键值数据由键范围将键值数据写入相应的RangeTab结构中;若NVM中所有RangeTab结构的键值数据达到第二阈值,选取部分RangeTab结构与SSD中L1层中键范围有重叠的所有SSTable文件合并到L1层;
SSD,负责存储LSM-Tree结构L1层以及所有下层SSTable文件数据,若Li层SSTable文件数量达到第三阈值,将Li层的部分SSTable文件合并到Li+1层,i≥1。
2.如权利要求1所述的键值存储系统,其特征在于,所述RangeTab结构分成三部分:Metadata区、Index区与Data区;
Metadata区用于记录RangeTab的元数据;
Index区包含cur和seq,cur用于记录定位到Data区的索引信息,seq初始值为0,在RangeTab每次写入数据时其值自动累加1,而当键值数据全部合并到下层后其值又重新设置为0;
Data区只负责存储键值数据。
3.如权利要求2所述的键值存储系统,其特征在于,所述Data区由多个物理地址相连的Chunk组成,每个Chunk记录着键值数据内容Chunkdata、数据的大小Chunksize、数量、相对偏移地址这些元数据信息,每个Chunk的Chunkdata内存储的所有键值对有序排列,然后依次记录每条键值对的相对偏移地址,最后记录该Chunk中键值对的数量。
4.如权利要求1至3任一项所述的键值存储系统,其特征在于,使用哈希地址空间结构记录NVM上RangeTab结构存储的每个key的偏移地址,将含有足够多键值数据的每相邻若干个Chunk分成一组,以组为单位分批次构造哈希映射;查找某个Chunk内的键值对时使用哈希映射,在哈希地址空间中索引到键值数据的偏移地址,由偏移地址在Chunk结构中找到键值数据。
5.如权利要求1至3任一项所述的键值存储系统,其特征在于,在Immutable键值数据写到NVM之前,将key前缀相同的多个键值对以Chunk结构组织起来,每个Chunk内按照key的大小有序排列,然后根据key的前缀映射到有相同前缀的RangeTab,并将数据追加写到该RangeTab的Data区内最后一个Chunk的末尾。
6.如权利要求1至4任一项所述的键值存储系统,其特征在于,NVM上的数据合并到SSD上L1层时,选取部分RangeTab结构,具体如下:
(1)若存在某个RangeTab存储的数据量与该RangeTab容量的比值超过阈值β,则对这些RangeTab按照数据量与总容量的比值从高到低排序,依次从比值最高的RangeTab开始将数据合并到下层;
(2)对于那些数据量与容量的比值达到阈值α的RangeTab,计算各个RangeTab的数据量与相邻下层存在键范围重叠的SSTable数据量的比值,并选取其中比值最大的RangeTab参与合并;
(3)当所有RangeTab数据与容量比值的平均值大于μ,只考虑数据量与容量的比值小于α但均大于μ的RangeTab,随机选取键范围相邻且数据量尽可能多的多个RangeTab一起参与合并,且这些RangeTab总数据量与单个RangeTab容量比值不超过阈值γ;
(4)如果不满足前三个条件,则RangeTab不会触发合并,0<μ<α<β<1。
7.如权利要求1所述的键值存储系统,其特征在于,采用双缓存区结构,每个RangeTab在初始化分配Data区空间时,先分配一块物理空间,当一个缓冲区因为数据写满而进行合并流程时,动态分配一块同样大小的新物理空间,Chunk数据在新缓冲区完成写入过程,当合并流程结束后前一个缓冲区释放,只留下新缓冲区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910497294.6A CN110347336B (zh) | 2019-06-10 | 2019-06-10 | 一种基于nvm与ssd混合存储结构的键值存储系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910497294.6A CN110347336B (zh) | 2019-06-10 | 2019-06-10 | 一种基于nvm与ssd混合存储结构的键值存储系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110347336A true CN110347336A (zh) | 2019-10-18 |
CN110347336B CN110347336B (zh) | 2020-07-10 |
Family
ID=68181724
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910497294.6A Active CN110347336B (zh) | 2019-06-10 | 2019-06-10 | 一种基于nvm与ssd混合存储结构的键值存储系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110347336B (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111078143A (zh) * | 2019-11-27 | 2020-04-28 | 华中科技大学 | 基于段映射进行数据布局和调度的混合存储方法及系统 |
CN111176584A (zh) * | 2019-12-31 | 2020-05-19 | 曙光信息产业(北京)有限公司 | 一种基于混合内存的数据处理方法及装置 |
CN111221922A (zh) * | 2019-12-31 | 2020-06-02 | 苏州浪潮智能科技有限公司 | 一种RocksDB数据库数据写入方法及RocksDB数据库 |
CN111309270A (zh) * | 2020-03-13 | 2020-06-19 | 清华大学 | 一种持久性内存键值存储系统 |
CN111399777A (zh) * | 2020-03-16 | 2020-07-10 | 北京平凯星辰科技发展有限公司 | 一种基于数据值分类的差异化键值数据存储方法 |
CN112395212A (zh) * | 2020-11-05 | 2021-02-23 | 华中科技大学 | 减少键值分离存储系统的垃圾回收和写放大的方法及系统 |
CN113051241A (zh) * | 2019-12-27 | 2021-06-29 | 中国移动通信集团湖南有限公司 | 数据库持久化的方法、装置及设备 |
CN113297136A (zh) * | 2021-05-25 | 2021-08-24 | 南京大学 | 一种面向lsm树的键值存储方法和存储系统 |
CN113688130A (zh) * | 2021-08-05 | 2021-11-23 | 浪潮云信息技术股份公司 | 一种内存数据库存储引擎管理方法 |
CN113821177A (zh) * | 2021-10-11 | 2021-12-21 | 中山大学 | 一种基于nvm的lsm树的存储结构及其数据存储方法 |
CN114415966A (zh) * | 2022-01-25 | 2022-04-29 | 武汉麓谷科技有限公司 | 一种kv ssd存储引擎的构建方法 |
CN114691039A (zh) * | 2022-03-22 | 2022-07-01 | 北京达佳互联信息技术有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN114741028A (zh) * | 2022-03-18 | 2022-07-12 | 华中科技大学 | 一种基于ocssd的持久键值存储方法、设备及系统 |
CN114969069A (zh) * | 2022-05-30 | 2022-08-30 | 华侨大学 | 一种应用于键值存储系统的热度感知本地更新方法 |
US11537582B2 (en) | 2021-04-16 | 2022-12-27 | Samsung Electronics Co., Ltd. | Data access method, a data access control device, and a data access system |
KR102512571B1 (ko) * | 2021-12-06 | 2023-03-22 | 성균관대학교산학협력단 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
CN116414839A (zh) * | 2023-04-14 | 2023-07-11 | 中国科学院软件研究所 | 一种基于LSM_Tree的面向SSD的时序数据存储方法和系统 |
CN117909296A (zh) * | 2024-03-14 | 2024-04-19 | 支付宝(杭州)信息技术有限公司 | 一种基于lsm树的文件合并方法及相关设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0844537A (ja) * | 1994-05-02 | 1996-02-16 | Tandem Comput Inc | コンピュータシステムにおいてデータをソートし格納するための方法およびデータ記憶媒体 |
US6065003A (en) * | 1997-08-19 | 2000-05-16 | Microsoft Corporation | System and method for finding the closest match of a data entry |
CN105653720A (zh) * | 2016-01-07 | 2016-06-08 | 北京人大金仓信息技术股份有限公司 | 一种可灵活配置的数据库分层存储优化方法 |
CN105930280A (zh) * | 2016-05-27 | 2016-09-07 | 诸葛晴凤 | 一种面向非易失性内存的高效的页面组织和管理方法 |
US20170212680A1 (en) * | 2016-01-22 | 2017-07-27 | Suraj Prabhakar WAGHULDE | Adaptive prefix tree based order partitioned data storage system |
CN109032958A (zh) * | 2017-06-12 | 2018-12-18 | 西部数据技术公司 | 用于在控制同步操作期间读取数据的方法和设备 |
CN109189759A (zh) * | 2018-08-01 | 2019-01-11 | 华为技术有限公司 | Kv存储系统中的数据读取方法、数据查询方法、装置及设备 |
CN109521959A (zh) * | 2018-11-01 | 2019-03-26 | 西安交通大学 | 一种基于ssd-smr磁盘混合键值存储系统数据组织方法 |
-
2019
- 2019-06-10 CN CN201910497294.6A patent/CN110347336B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0844537A (ja) * | 1994-05-02 | 1996-02-16 | Tandem Comput Inc | コンピュータシステムにおいてデータをソートし格納するための方法およびデータ記憶媒体 |
US6065003A (en) * | 1997-08-19 | 2000-05-16 | Microsoft Corporation | System and method for finding the closest match of a data entry |
CN105653720A (zh) * | 2016-01-07 | 2016-06-08 | 北京人大金仓信息技术股份有限公司 | 一种可灵活配置的数据库分层存储优化方法 |
US20170212680A1 (en) * | 2016-01-22 | 2017-07-27 | Suraj Prabhakar WAGHULDE | Adaptive prefix tree based order partitioned data storage system |
CN105930280A (zh) * | 2016-05-27 | 2016-09-07 | 诸葛晴凤 | 一种面向非易失性内存的高效的页面组织和管理方法 |
CN109032958A (zh) * | 2017-06-12 | 2018-12-18 | 西部数据技术公司 | 用于在控制同步操作期间读取数据的方法和设备 |
CN109189759A (zh) * | 2018-08-01 | 2019-01-11 | 华为技术有限公司 | Kv存储系统中的数据读取方法、数据查询方法、装置及设备 |
CN109521959A (zh) * | 2018-11-01 | 2019-03-26 | 西安交通大学 | 一种基于ssd-smr磁盘混合键值存储系统数据组织方法 |
Non-Patent Citations (1)
Title |
---|
马文龙,朱妤晴等: "Key_Value型NoSQL本地存储系统研究", 《计算机学报》 * |
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111078143A (zh) * | 2019-11-27 | 2020-04-28 | 华中科技大学 | 基于段映射进行数据布局和调度的混合存储方法及系统 |
CN111078143B (zh) * | 2019-11-27 | 2020-12-29 | 华中科技大学 | 基于段映射进行数据布局和调度的混合存储方法及系统 |
CN113051241A (zh) * | 2019-12-27 | 2021-06-29 | 中国移动通信集团湖南有限公司 | 数据库持久化的方法、装置及设备 |
CN113051241B (zh) * | 2019-12-27 | 2023-08-15 | 中国移动通信集团湖南有限公司 | 数据库持久化的方法、装置及设备 |
CN111176584A (zh) * | 2019-12-31 | 2020-05-19 | 曙光信息产业(北京)有限公司 | 一种基于混合内存的数据处理方法及装置 |
CN111221922A (zh) * | 2019-12-31 | 2020-06-02 | 苏州浪潮智能科技有限公司 | 一种RocksDB数据库数据写入方法及RocksDB数据库 |
CN111176584B (zh) * | 2019-12-31 | 2023-10-31 | 曙光信息产业(北京)有限公司 | 一种基于混合内存的数据处理方法及装置 |
CN111309270A (zh) * | 2020-03-13 | 2020-06-19 | 清华大学 | 一种持久性内存键值存储系统 |
CN111399777A (zh) * | 2020-03-16 | 2020-07-10 | 北京平凯星辰科技发展有限公司 | 一种基于数据值分类的差异化键值数据存储方法 |
CN111399777B (zh) * | 2020-03-16 | 2023-05-16 | 平凯星辰(北京)科技有限公司 | 一种基于数据值分类的差异化键值数据存储方法 |
CN112395212A (zh) * | 2020-11-05 | 2021-02-23 | 华中科技大学 | 减少键值分离存储系统的垃圾回收和写放大的方法及系统 |
US11537582B2 (en) | 2021-04-16 | 2022-12-27 | Samsung Electronics Co., Ltd. | Data access method, a data access control device, and a data access system |
CN113297136B (zh) * | 2021-05-25 | 2023-11-03 | 南京大学 | 一种面向lsm树的键值存储方法和存储系统 |
CN113297136A (zh) * | 2021-05-25 | 2021-08-24 | 南京大学 | 一种面向lsm树的键值存储方法和存储系统 |
CN113688130B (zh) * | 2021-08-05 | 2023-10-13 | 上海沄熹科技有限公司 | 一种内存数据库存储引擎管理方法 |
CN113688130A (zh) * | 2021-08-05 | 2021-11-23 | 浪潮云信息技术股份公司 | 一种内存数据库存储引擎管理方法 |
CN113821177A (zh) * | 2021-10-11 | 2021-12-21 | 中山大学 | 一种基于nvm的lsm树的存储结构及其数据存储方法 |
KR102512571B1 (ko) * | 2021-12-06 | 2023-03-22 | 성균관대학교산학협력단 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
CN114415966A (zh) * | 2022-01-25 | 2022-04-29 | 武汉麓谷科技有限公司 | 一种kv ssd存储引擎的构建方法 |
CN114741028A (zh) * | 2022-03-18 | 2022-07-12 | 华中科技大学 | 一种基于ocssd的持久键值存储方法、设备及系统 |
CN114691039A (zh) * | 2022-03-22 | 2022-07-01 | 北京达佳互联信息技术有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN114969069A (zh) * | 2022-05-30 | 2022-08-30 | 华侨大学 | 一种应用于键值存储系统的热度感知本地更新方法 |
CN114969069B (zh) * | 2022-05-30 | 2024-06-18 | 华侨大学 | 一种应用于键值存储系统的热度感知本地更新方法 |
CN116414839A (zh) * | 2023-04-14 | 2023-07-11 | 中国科学院软件研究所 | 一种基于LSM_Tree的面向SSD的时序数据存储方法和系统 |
CN116414839B (zh) * | 2023-04-14 | 2024-06-11 | 中国科学院软件研究所 | 一种基于LSM_Tree的面向SSD的时序数据存储方法和系统 |
CN117909296A (zh) * | 2024-03-14 | 2024-04-19 | 支付宝(杭州)信息技术有限公司 | 一种基于lsm树的文件合并方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110347336B (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110347336A (zh) | 一种基于nvm与ssd混合存储结构的键值存储系统 | |
CN106708427B (zh) | 一种适用于键值对数据的存储方法 | |
CN107463447B (zh) | 一种基于远程直接非易失内存访问的b+树管理方法 | |
CN102364474B (zh) | 用于机群文件系统的元数据存储系统和管理方法 | |
CN104899156B (zh) | 一种面向大规模社交网络的图数据存储及查询方法 | |
CN104035729B (zh) | 一种日志映射的块设备精简配置方法 | |
CN103186350B (zh) | 混合存储系统及热点数据块的迁移方法 | |
CN102779096B (zh) | 一种基于页块面三维的闪存地址映射方法 | |
CN111522507B (zh) | 一种低延迟的文件系统地址空间管理方法、系统及介质 | |
CN103838853B (zh) | 一种基于不同存储介质的混合文件系统 | |
CN107066393A (zh) | 提高地址映射表中映射信息密度的方法 | |
CN105389264B (zh) | 存储系统中垃圾收集的方法和系统 | |
CN110188108A (zh) | 数据存储方法、装置、系统、计算机设备及存储介质 | |
CN101604226A (zh) | 一种基于虚拟raid构建动态缓存池提高存储系统性能的方法 | |
CN108733306A (zh) | 一种文件合并方法及装置 | |
CN102201005A (zh) | 一种文件系统的流媒体增强文件布局方法 | |
CN114356877A (zh) | 一种基于持久内存的日志结构合并树分级存储方法及系统 | |
CN113590612A (zh) | Dram-nvm混合索引结构的构建方法及操作方法 | |
CN117908755A (zh) | 一种基于非易失性内存的键值存储写优化方法 | |
KR100907477B1 (ko) | 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법 | |
CN113704217A (zh) | 一种分布式持久性内存文件系统中元数据及数据组织架构方法 | |
CN116204130A (zh) | 一种键值存储系统和键值存储系统的管理方法 | |
US20120317384A1 (en) | Data storage method | |
US11366609B2 (en) | Technique for encoding deferred reference count increments and decrements | |
CN110413229A (zh) | 一种数据写入方法 |
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 |