CN112395212B - 减少键值分离存储系统的垃圾回收和写放大的方法及系统 - Google Patents

减少键值分离存储系统的垃圾回收和写放大的方法及系统 Download PDF

Info

Publication number
CN112395212B
CN112395212B CN202011222264.3A CN202011222264A CN112395212B CN 112395212 B CN112395212 B CN 112395212B CN 202011222264 A CN202011222264 A CN 202011222264A CN 112395212 B CN112395212 B CN 112395212B
Authority
CN
China
Prior art keywords
key
value pair
storage area
value
memory
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
CN202011222264.3A
Other languages
English (en)
Other versions
CN112395212A (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.)
Huazhong University of Science and Technology
Original Assignee
Huazhong University of Science and Technology
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 Huazhong University of Science and Technology filed Critical Huazhong University of Science and Technology
Priority to CN202011222264.3A priority Critical patent/CN112395212B/zh
Publication of CN112395212A publication Critical patent/CN112395212A/zh
Application granted granted Critical
Publication of CN112395212B publication Critical patent/CN112395212B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1847File system types specifically adapted to static storage, e.g. adapted to flash memory or SSD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement

Landscapes

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

Abstract

本发明公开了一种减少键值分离存储系统的垃圾回收和写放大的方法及系统,属于计算机存储领域,系统包括内存、NVM和SSD,NVM中的第一存储区域和第二存储区域分别按照LSM‑tree和内存池管理数据;方法包括:判断待插入的键值对的大小是否大于等于第一阈值,若是,则将键值对插入第二存储区域,然后将键和键值地址插入LSM‑tree;否则,将键值对直接插入LSM‑tree;在内存池中键值对被删除时,将相应存储单元标记为空闲内存单元;在第二存储区域中的数据量高于第二阈值时,将访问最不频繁的键值对下刷到SSD,并更新键值对的存储地址;在NVM上设置标志位段,标识SSD上数据段键值对的有效性。本发明能够减少键值存储系统的垃圾回收和写放大,提高键值分离存储系统的整体性能。

Description

减少键值分离存储系统的垃圾回收和写放大的方法及系统
技术领域
本发明属于计算机存储领域,更具体地,涉及一种减少键值分离存储系统的垃圾回收和写放大的方法及系统。
背景技术
近年来,伴随着云计算、大数据、物联网、人工智能等信息技术的快速发展以及网上购物、网上订餐、微博、等软件的大量使用,数据量呈现爆炸增长,如何有效地存储与管理海量数据,对现有的计算机系统存储技术提出了新的挑战。
众所周知,磁盘的顺序写是随机写的1000倍左右,LSM-tree(Log-StructuredMerge Tree,日志结构树)的结构是将随机写转化为顺序写,大大提高了数据写入磁盘的性能。但LSM-tree的合并过程带来了读放大和写放大问题。LSM-tree的读操作需要从上层level到下层level层层寻找查找的数据,这个过程可能不止一次I/O,特别是对于范围查询的问题,读放大问题比较严重。此外,因为所有的写入是顺序写入,删除和更新不是就地更新,所以过期数据不会被清理掉,占用一部分空间,存在空间放大问题。LSM-tree的外存空间不足时,需要对外存中的键值有序排列的文件定期合并,期间需要对多个文件读入内存,删除已删除或被更新的键值对,对所有数据归并排序后再写入外存的新文件中。并且不同level与上下层之间都会进行合并操作,写放大问题非常严重。最近几年NAND FLASH和非易失内存技术快速革新和发展迅速,SSD(Solid State Disk,固态硬盘)和NVM(Non-VolatileMemory,非易失性内存)的容量越来越大,价格逐渐降低,SSD的使用越来越广泛。但SSD和NVM的顺序写和随机写的速度相差不大,并且SSD和NVM的写入次数有限,所以LSM-tree对有序文件合并产生的写放大问题,成为影响写入性能和存储寿命的重要因素,也是当前基于LSM-tree的键值存储系统需要解决的热点和难点问题。
为了减少合并带来的写放大和I/O放大问题,Wisckey提出键值分离,值存放在环形日志中,LSM-tree的合并过程并不删除环形日志中的无效值,需要之后进行垃圾回收。此外,Wisckey的存放值的环形日志,只能从日志的尾部进行垃圾回收,当尾部的有效值较多时,垃圾回收过程存在较大的写放大问题并减少SSD的使用寿命。同时,键值分离系统的垃圾回收过程也存在读放大问题,垃圾回收过程中并不知道环形日志中的键值对是否有效,需要查询LSM-tree。如果找到值对应键,比较值地址与值当前在环形日志中的地址是否一致,或者查找值对应的键是否有删除标记,根据从LSM-tree查得的结果进行垃圾回收操作。Wisckey还存在另外一个缺点,对于值较小的键值对,键值分离后性能不升反降,空间放大问题明显。
发明内容
针对现有技术的缺陷和改进需求,本发明提供了一种减少键值分离存储系统的垃圾回收和写放大的方法及系统,其目的在于,减少键值存储系统的写放大和I/O放大,减少甚至消除键值分离带来的垃圾回收,提高键值分离存储系统的整体性能。
为实现上述目的,按照本发明的一个方面,提供了一种减少键值分离存储系统的写放大和垃圾回收的方法,键值分离存储系统包括内存、NVM和SSD,NVM中创建有第一存储区域和第二存储区域,第一存储区域采用LSM-tree的形式管理数据,第二存储区域采用内存池的形式管理数据;
方法包括:
LSM-tree插入步骤:将键值对插入内存中的可变表;待可变表变为不可变表后,其中的存储的键值对将下刷到第一存储区域中;
内存池插入步骤:将键值对<key,value>插入第二存储区域中,将键值对<key,value>的键key与其在第二存储区域中的存储地址addr组成新的键值对<key,addr>,并利用LSM-tree插入步骤插入键值对<key,addr>;
键值对插入步骤:判断待插入的原始键值对的大小是否大于等于预设的第一阈值,若是,则利用内存池插入步骤插入原始键值对;否则,利用LSM-tree插入步骤插入原始键值对;
键值对删除步骤:在第二存储区域中的键值对被删除时,将用于存储被删除键值对的存储单元标记为可重新插入键值对的空闲内存单元;
键值对迁移步骤:在第二存储区域中存储的数据量高于预设的第二阈值时,将第二存储区域中访问最不频繁的键值对下刷到SSD中,并对第二存储区域中键值对的存储地址进行更新。
本发明在键值分离存储系统的基础上,引入了非易失性内存(NVM),并在NVM中划分出第一存储区域和第二存储区域,第一存储区域以LSM-tree的形式管理数据,第二存储区域以内存池的方法管理键值对数据,由于非易失性内存具有可以字节更新和就地更新的特征,当内存池中某个内存单元中的键值对被删除后,该内存单元可重新写入新数据,整个过程不需要垃圾回收,从而可以有效减少NVM中第二存储区域的写放大和垃圾回收,提高键值分离存储系统的整体性能。
本发明在NVM的第二存储区域中存储的键值对较多时,将其中访问最不频繁的键值对,即冷键值对,下刷到SSD中,由此能够减少SSD中数据被访问的频率,进一步减少对SSD的垃圾回收操作。
进一步地,NVM中还创建有第三存储区域,其中创建有标志位段;
SSD采用数据段的形式管理数据,第三存储区域中的标志位段与SSD中的数据段一一对应;标志位段用于记录对应数据段中各键值对的有效性。
本发明在NVM中还划分出第三存储区域,在其中维护与SSD中数据段一一对应的标志位段,用于记录对应数据段中各键值对的有效性,从而在对SSD进行垃圾回收时,对于被回收数据段中的每个键值对,只需要查询对应的标志位段就可以知道键值对的有效性,而不需要查询LSM-tree,减少了垃圾回收时的读放大,有效提高了SSD上垃圾回收的效率。
进一步地,本发明提供的减少键值分离存储系统的垃圾回收和写放大的方法,还包括:
SSD垃圾回收步骤:在对SSD进行垃圾回收时,遍历第三存储区域中的标志位段,将其中有效标志位率最小的标志位段所对应的数据段作为待回收的目标数据段;将目标数据段中所有的有效键值对写入新的数据段中后,释放目标数据段的存储空间;
其中,有效标志位率为标志位段中有效标志位的数量与总标志位的数量的比值。
本发明在对SSD进行回收时,通过遍历NVM中的标志位段,将有效标志位率最小的数据段选定为进行垃圾回收的数据段,由此能够在一次垃圾回收中释放尽可能多的SSD存储空间,进一步提高SSD上垃圾回收的效率。
进一步地,各标志位段的头部记录了该标志位段的有效标志位率。
本发明在各标志位段的头部记录该标志位段上的有效标志微滤,从而能够在SSD垃圾回收步骤中快速获取到有效标志位率最小的标志位段,进而确定进行垃圾回收的数据段,进一步提高SSD上垃圾回收的效率。
进一步地,第二存储区域中创建了多个内存池,每个内存池中有多个内存块,每个内存块中有多个内存单元,每个内存单元用于存储一个键值对;同一个内存池中内存单元的大小相同,不同内存池中内存单元的大小不同;
内存池插入步骤中,将键值对<key,value>插入第二存储区域中,包括:
向上取与键值对<key,value>的大小最接近的存储单元,在相应的内存池中分配空闲存储单元后,将键值对<key,value>写入其中。
本发明在第二存储区域中创建具有不同内存单元大小的内存池,并且插入第二存储区域的键值对最终会被插入足以容纳该键值对且与该键值对大小最接近的内存单元,由此能够有效提高NVM的存储空间利用率,减少数据下刷到SSD中。
进一步地,每个内存块中维护有一个访问计数,用于记录其中键值对的访问次数之和;
内存块的访问计数越大,其中存储的键值对访问越频繁。
本发明为每个内存块维护一个访问计数,以衡量其中各存储单元内存储的键值对的访问频率,由此能够以较小的存储开销和管理复杂度较为准确地记录各键值对的冷热属性。
进一步地,每经过预设的时间间隔,将各内存块的访问计数清零。
由于数据的访问具有时间局部性,存在一些内存块中的键值对在前一段时间频繁访问,接下来的时间访问较少的情况;本发明每经过预设的时间间隔,都将各内存块的访问计数清零,能够较为准确地记录键值对当前的访问频率。
进一步地,第一阈值为NVM的最小写单位。
非易失性内存具有最小写单位,当写入其中的键值对大小小于其最小写单位,需要进行填充;本发明以非易失性内存的最小写单位作为第一阈值,将大小小于第一阈值的键值对插入内存中的可变表,而将大小大于等于第一阈值的键值对插入NVM中的内存池,使得键值对插入NVM中时不需要进行数据填充,减少NVM存储空间浪费。
进一步地,本发明提供的减少键值分离存储系统的垃圾回收和写放大的方法,还包括:
键值对读取步骤:在内存中的可变表或不可变表,或NVM中的LSM-tree中查找与待读取键值对的键相同的键值对,作为候选键值对;若候选键值对的值为存储地址,则按照该地址查找键值对并返回;所候选键值对的值不是存储地址,则直接返回候选键值对。
按照本发明的另一个方面,提供了一种键值分离存储系统,包括:内存、NVM和SSD,NVM中创建有第一存储区域和第二存储区域,第一存储区域采用LSM-tree的形式管理数据,第二存储区域采用内存池的形式管理数据;
键值分离存储系统还包括数据管理模块,数据管理模块包括:
LSM-tree插入单元,用于将键值对插入内存中的可变表;待可变表变为不可变表后,其中的存储的键值对将下刷到第一存储区域中;
内存池插入单元,用于将键值对<key,value>插入第二存储区域中,将键值对<key,value>的键key与其在第二存储区域中的存储地址addr组成新的键值对<key,addr>,并利用LSM-tree插入单元插入键值对<key,addr>;
键值对插入单元,用于判断待插入的原始键值对的大小是否大于等于预设的第一阈值,若是,则利用内存池插入单元插入原始键值对;否则,利用LSM-tree插入单元插入原始键值对;
键值对删除单元,用于在第二存储区域中的键值对被删除时,将用于存储被删除键值对的存储单元标记为可重新插入键值对的空闲内存单元;
键值对迁移单元,用于在第二存储区域中存储的数据量高于预设的第二阈值时,将第二存储区域中访问最不频繁的键值对下刷到SSD中,并对第二存储区域中键值对的存储地址进行更新。
总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
(1)本发明在键值分离存储系统的基础上,引入了非易失性内存,并在NVM中划分出第一存储区域和第二存储区域,第一存储区域以LSM-tree的形式管理数据,第二存储区域以内存池的方法管理键值对数据,由于非易失性内存具有可以字节更新和就地更新的特征,当内存池中某个内存单元中的键值对被删除后,该内存单元可重新写入新数据,整个过程不需要垃圾回收,从而可以有效减少NVM中第二存储区域的写放大和垃圾回收,提高键值分离存储系统的整体性能。
(2)本发明在NVM的第二存储区域中存储的键值对较多时,将其中访问最不频繁的键值对,即冷键值对,下刷到SSD中,由此能够减少SSD中数据被访问的频率,进一步减少对SSD的垃圾回收操作。
(3)本发明在NVM中还划分出第三存储区域,在其中维护与SSD中数据段一一对应的标志位段,用于记录对应数据段中各键值对的有效性,从而在对SSD进行垃圾回收时,对于被回收数据段中的每个键值对,只需要查询对应的标志位段就可以知道键值对的有效性,而不需要查询LSM-tree,减少了垃圾回收时的读放大,有效提高了SSD上垃圾回收的效率。
(4)本发明在对SSD进行回收时,通过遍历NVM中的标志位段,将有效标志位率最小的数据段选定为进行垃圾回收的数据段,由此能够在一次垃圾回收中释放尽可能多的SSD存储空间,进一步提高SSD上垃圾回收的效率。在本发明的优选方案中,在各标志位段的头部记录该标志位段上的有效标志微滤,从而能够在SSD垃圾回收步骤中快速获取到有效标志位率最小的标志位段,进而确定进行垃圾回收的数据段,进一步提高SSD上垃圾回收的效率。
(5)本发明在第二存储区域中创建具有不同内存单元大小的内存池,并且插入第二存储区域的键值对最终会被插入足以容纳该键值对且与该键值对大小最接近的内存单元,减少NVM中存储空间浪费。
(6)本发明为每个内存块维护一个访问计数,以衡量其中各存储单元内存储的键值对的访问频率,由此能够以较小的存储开销和管理复杂度较为准确地记录各键值对的冷热属性。在本发明的优选方案中,每经过预设的时间间隔,都将各内存块的访问计数清零,由此能够基于数据访问的时间局部性特点,较为准确地记录键值对当前的访问频率。
附图说明
图1为本发明实施例提供的键值分离存储系统示意图以及内存池插入步骤示意图;
图2为本发明实施例提供的键值对被删除时,基于键值对的存储位置进行不同操作的示意图;
图3为本发明实施例提供的键值对迁移步骤示意图;
图4为本发明实施例提供的键值对插入步骤示意图;
图5为本发明实施例提供的键值对读取步骤示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
在本发明中,本发明及附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
为了解决现有的键值分离系统中对于更新频繁的负载存在的严重写放大问题,以及由于键值分离而带来的垃圾回收问题,本发明提供了一种减少键值分离存储系统的方法及系统,其整体思路在于:在键值分离存储系统中引入NVM,在实现键值分离的基础上,在NVM中划分出一个单独的存储区域,在其中以内存池的形式管理较大的键值对,从而可以利用NVM的字节更新和就地更新特性,减少系统的写放大和垃圾回收。
不失一般性地,在以下实施例中,以3dXpoint为例对本发明的技术方案进行解释说明。3dXpoint是一种NVM,其最小写单位是256B,小于256B的数据写入其中时,需要进行数据填充。以下为实施例。
实施例1:
一种减少键值分离存储系统的写放大和垃圾回收的方法,键值分离存储系统如图1所示,包括内存、NVM和SSD,NVM中创建有第一存储区域和第二存储区域,第一存储区域采用LSM-tree的形式管理数据,第二存储区域采用内存池的形式管理数据;
方法包括:
LSM-tree插入步骤:
将键值对插入内存中的可变表;待可变表变为不可变表后,其中的存储的键值对将下刷到第一存储区域中;
在levelDB等键值分离存储系统中,键值对被插入LSM-tree之前,会先插入内存中的可变表,即图1中的memtable,可变表具体是一种跳表;当可变表写满后,会变成不可变表,即图1中的immutable,当达到预设条件时,不可变表会下刷到LSM-tree中;
内存池插入步骤:
将键值对<key,value>插入第二存储区域中,具体如图1中的步骤1所示;将键值对<key,value>的键key与其在第二存储区域中的存储地址addr组成新的键值对<key,addr>,并利用LSM-tree插入步骤插入键值对<key,addr>,具体如图1中的步骤2~4所示,首先键值对<key,addr>会被插入内存中的可变表,之后可变表会变成不可变表,最后不可变表中的键值对会被下刷到NVM中的LSM-tree中;
可选地,本实施例中,对于存储在NVM的内存池中的键值对,其存储地址addr具体由内存池id、内存块id和内存单元id构成;
键值对插入步骤:
判断待插入的原始键值对的大小是否大于等于预设的第一阈值,若是,则利用内存池插入步骤插入原始键值对;否则,利用LSM-tree插入步骤插入原始键值对;
第一阈值可根据实际所选用的NVM类型相应确定,在本实施例中,由于所选用的NVM具体为3dXpoint,其最小写单位为256B,为了避免在将键值对插入内存池时进行数据填充,本实施例中,第一阈值具体为256B;应当说明的是,此处第一阈值的具体取值及其取值确定方式,仅为本发明的一种优选的实施方式,不应理解为对本发明的唯一限定,在本发明其他的一些实施例中,该取值也可以采用其他方式进行设定;
键值对删除步骤:
在第二存储区域中的键值对被删除时,将用于存储被删除键值对的存储单元标记为可重新插入键值对的空闲内存单元;
键值对迁移步骤:
在第二存储区域中存储的数据量高于预设的第二阈值时,将第二存储区域中访问最不频繁的键值对下刷到SSD中,并对第二存储区域中键值对的存储地址进行更新;
第二阈值具体可根据实际所需存储的键值对大小以及数据量确定,可选地,本实施例中,第二阈值具体为NVM总存储容量的80%;
为了准确获取NVM的第二存储区域中存储的各键值对的访问频率,本实施例中,每个内存块中维护有一个访问计数,用于记录其中键值对的访问次数之和;以count表示内存块的访问计数,则count的初始值为0,访问某一个内存块中的键值对后,对该内存块中的count执行+1操作;
内存块的访问计数越大,其中存储的键值对访问越频繁;
通过为每个内存块维护一个访问计数,以衡量其中各存储单元内存储的键值对的访问频率,由此能够以较小的存储开销和管理复杂度较为准确地记录各键值对的冷热属性;
考虑到数据访问的时间局部性,作为一种优选的实施方式,本实施例中,每经过预设的时间间隔,将各内存块的访问计数清零;该时间间隔可根据数据负载的访问特性相应设定。
在LSM-tree区域的键值对执行Compaction(合并操作)后,会有一些键值对被删除或更新,已经被删除或者被更新过的键值对会被写入一个删除队列中,如图2所示;根据被删除的键值对的位置,如果在NVM中,需要执行上述键值对删除步骤,本实施例中,直接将内存池中被删除的键值对所在内存单元id加入保存空闲单元id的队列中,以标记该内存单元中数据已经无效,可以再次写入数据;通过该方法,利用NVM键值更新和字节更新的特性,在NVM上无需进行垃圾回收操作,大大减少了写放大问题。
为了提高SSD上垃圾回收的效率,作为一种优选的实施方式,如图1所示,本实施例1中,NVM中还创建有第三存储区域,其中创建有标志位段;
SSD采用数据段的形式管理数据,第三存储区域中的标志位段与SSD中的数据段一一对应;标志位段用于记录对应数据段中各键值对的有效性,如图1所示,标志位段中的一个标志位对应数据段中的一个键值对,具体地,1标识键值对有效,0标识键值对无效;在实际应用中,可在数据段的头部记录与其对应的标志位段的地址,并在标志位段的头部记录与其对应的数据段的地址,以记录数据段和标志位段的一一对应关系,也可以单独维护一个映射表来记录数据段和标志位段的一一对应关系;
图3所示为本实施例执行一次键值对迁移步骤的示意图;首先,会确定NVM中访问最不频繁的部分键值对作为待迁移的键值对,如图3中的步骤1所示;然后,所选定的键值对将被迁移到SSD的数据段中,如图3中的步骤2所示;由于NVM具有字节更新和就地更新的特性,其中的键值对被迁移到SSD中后,相应的内存单元可用于存储新的键值对,本实施例中,会将这些内存单元的id加入一个队列(即图3中所示的Free_slot<queue>),此步骤如图3中的步骤2所示;键值对下刷到SSD中,相应地会在NVM的第三存储区域中创建对应的标志位段,并记录对应键值对的有效性,如图3中的步骤3所示;
如图2所示,在键值对被删除时,如果键值对位于SSD中,则需要找到键值对地址对应的标志位,将标志位置为0,标识键值对已经无效。
基于上述数据管理方式,本实施例还包括:
SSD垃圾回收步骤:在对SSD进行垃圾回收时,遍历第三存储区域中的标志位段,将其中有效标志位率最小的标志位段所对应的数据段作为待回收的目标数据段;将目标数据段中所有的有效键值对写入新的数据段中后,释放目标数据段的存储空间;
其中,有效标志位率为标志位段中有效标志位的数量与总标志位的数量的比值;
由于在对SSD进行垃圾回收时,仅需查找标志位段即可确定数据段中键值对的有效性,而无需访问LSM-tree,减少了垃圾回收时的读放大,因此,本实施例能够有效提高SSD上垃圾回收的效率;
为了便于快速确定需要进行垃圾回收的数据段,作为一种优选的实施方式,本实施例中,各标志位段的头部记录了该标志位段的有效标志位率。
为了提高NVM的存储空间利用率,作为一种优选的实施方式,第二存储区域中创建了多个内存池,每个内存池中有多个内存块,每个内存块中有多个内存单元,每个内存单元用于存储一个键值对;同一个内存池中内存单元的大小相同,不同内存池中内存单元的大小不同;
内存池插入步骤中,将键值对<key,value>插入第二存储区域中,包括:
向上取与键值对<key,value>的大小最接近的存储单元,在相应的内存池中分配空闲存储单元后,将键值对<key,value>写入其中;
具体地,本实施例中,内存单元的大小分别为256B、512B、1KB、2KB,相应地,键值对插入步骤如图4所示,具体如下:
如果键值对的大小为256B,键值对存放入内存单元大小为256B的内存池中;如果键值对的大小为256B~512B,键值对存放入内存单元大小为512B的内存池中;如果键值对的大小为512B~1KB,键值对存放入内存单元为1KB的内存池中;如果键值对的大小为1KB~2KB,键值对存放入内存单元为2KB的内存池中;如果键值对大小大于2KB,则用多个内存单元大小为2KB的内存单元存放键值对。
本实施例还包括:
键值对读取步骤(如图5所示):在内存中的可变表或不可变表,或NVM中的LSM-tree中查找与待读取键值对的键相同的键值对,作为候选键值对;此查找键值对的流程与levelDB的流程相同,会依次访问可变表、不可变表以及LSM-tree,直至查找到所需查找的键值对;如果查找不成功,说明读请求的数据不存在,会返回相应的错误信息;
若候选键值对的值为存储地址,则按照该地址查找键值对并返回;所候选键值对的值不是存储地址,则直接返回候选键值对;查找到键值对后,根据该键值对的大小与第一阈值之间的关系即可判定其中的值是否是存储地址,具体地,如果键值对的大小小于第一阈值,则说明不是存储地址;如果键值对的大小大于等于第一阈值,则说明是存储地址,此时,按照这一存储地址相应访问NVM的第二存储区域或者SSD中的数据段,即可获取到所请求的键值对数据。
实施例2:
一种键值分离存储系统,包括:内存、NVM和SSD,NVM中创建有第一存储区域和第二存储区域,第一存储区域采用LSM-tree的形式管理数据,第二存储区域采用内存池的形式管理数据;
键值分离存储系统还包括数据管理模块,数据管理模块包括:
LSM-tree插入单元,用于将键值对插入内存中的可变表;待可变表变为不可变表后,其中的存储的键值对将下刷到第一存储区域中;
内存池插入单元,用于将键值对<key,value>插入第二存储区域中,将键值对<key,value>的键key与其在第二存储区域中的存储地址addr组成新的键值对<key,addr>,并利用LSM-tree插入单元插入键值对<key,addr>;
键值对插入单元,用于判断待插入的原始键值对的大小是否大于等于预设的第一阈值,若是,则利用内存池插入单元插入原始键值对;否则,利用LSM-tree插入单元插入原始键值对;
键值对删除单元,用于在第二存储区域中的键值对被删除时,将用于存储被删除键值对的存储单元标记为可重新插入键值对的空闲内存单元;
键值对迁移单元,用于在第二存储区域中存储的数据量高于预设的第二阈值时,将第二存储区域中访问最不频繁的键值对下刷到SSD中,并对第二存储区域中键值对的存储地址进行更新。
本实施例中,各模块的具体实施步骤可参考上述方法实施例中的描述,在此将不作复述。
总体而言,本发明通过引入非易失性存储,使得键值存储系统在减少写放大的同时,减少了SSD的垃圾回收,并且充分使用了NVM的字节更新和就地更新的特性,提升键值存储系统的整体性能。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种减少键值分离存储系统的垃圾回收和写放大的方法,其特征在于,所述键值分离存储系统包括内存、NVM和SSD,所述NVM中创建有第一存储区域、第二存储区域和第三存储区,所述第一存储区域采用LSM-tree的形式管理数据,所述第二存储区域采用内存池的形式管理数据,所述第三存储区中创建有标志位段;所述SSD采用数据段的形式管理数据,所述第三存储区域中的标志位段与所述SSD中的数据段一一对应;所述标志位段用于记录对应数据段中各键值对的有效性;
所述方法包括:
LSM-tree插入步骤:将键值对插入所述内存中的可变表;待所述可变表变为不可变表后,其中的存储的键值对将下刷到所述第一存储区域中;
内存池插入步骤:将键值对<key,value>插入所述第二存储区域中,将所述键值对<key,value>的键key与其在所述第二存储区域中的存储地址addr组成新的键值对<key,addr>,并利用所述LSM-tree插入步骤插入所述键值对<key,addr>;
键值对插入步骤:判断待插入的原始键值对的大小是否大于等于预设的第一阈值,若是,则利用所述内存池插入步骤插入所述原始键值对;否则,利用所述LSM-tree插入步骤插入所述原始键值对;
键值对删除步骤:在所述第二存储区域中的键值对被删除时,将用于存储被删除键值对的存储单元标记为可重新插入键值对的空闲内存单元;
键值对迁移步骤:在所述第二存储区域中存储的数据量高于预设的第二阈值时,将所述第二存储区域中访问最不频繁的键值对下刷到所述SSD中,并对所述第二存储区域中键值对的存储地址进行更新;
SSD垃圾回收步骤:在对SSD进行垃圾回收时,遍历所述第三存储区域中的标志位段,将其中有效标志位率最小的标志位段所对应的数据段作为待回收的目标数据段;将所述目标数据段中所有的有效键值对写入新的数据段中后,释放所述目标数据段的存储空间;
其中,所述有效标志位率为标志位段中有效标志位的数量与总标志位的数量的比值。
2.如权利要求1所述的减少键值分离存储系统的垃圾回收和写放大的方法,其特征在于,各标志位段的头部记录了该标志位段的有效标志位率。
3.如权利要求1所述的减少键值分离存储系统的垃圾回收和写放大的方法,其特征在于,所述第二存储区域中创建了多个内存池,每个内存池中有多个内存块,每个内存块中有多个内存单元,每个内存单元用于存储一个键值对;同一个内存池中内存单元的大小相同,不同内存池中内存单元的大小不同;
所述内存池插入步骤中,将键值对<key,value>插入所述第二存储区域中,包括:
向上取与所述键值对<key,value>的大小最接近的存储单元,在相应的内存池中分配空闲存储单元后,将所述键值对<key,value>写入其中。
4.如权利要求3所述的减少键值分离存储系统的垃圾回收和写放大的方法,其特征在于,每个内存块中维护有一个访问计数,用于记录其中键值对的访问次数之和;
内存块的访问计数越大,其中存储的键值对访问越频繁。
5.如权利要求4所述的减少键值分离存储系统的垃圾回收和写放大的方法,其特征在于,每经过预设的时间间隔,将各内存块的访问计数清零。
6.如权利要求1、3-5任一项所述的减少键值分离存储系统的垃圾回收和写放大的方法,其特征在于,所述第一阈值为所述NVM的最小写单位。
7.如权利要求1、3-5任一项所述的减少键值分离存储系统的垃圾回收和写放大的方法,其特征在于,还包括:
键值对读取步骤:在所述内存中的可变表或不可变表,或所述NVM中的LSM-tree中查找与待读取键值对的键相同的键值对,作为候选键值对;若所述候选键值对的值为存储地址,则按照该地址查找键值对并返回;所述候选键值对的值不是存储地址,则直接返回所述候选键值对。
8.一种键值分离存储系统,其特征在于,包括:内存、NVM和SSD,所述NVM中创建有第一存储区域、第二存储区域和第三存储区,所述第一存储区域采用LSM-tree的形式管理数据,所述第二存储区域采用内存池的形式管理数据,所述第三存储区中创建有标志位段;所述SSD采用数据段的形式管理数据,所述第三存储区域中的标志位段与所述SSD中的数据段一一对应;所述标志位段用于记录对应数据段中各键值对的有效性;
所述键值分离存储系统还包括数据管理模块,所述数据管理模块包括:
LSM-tree插入单元,用于将键值对插入所述内存中的可变表;待所述可变表变为不可变表后,其中的存储的键值对将下刷到所述第一存储区域中;
内存池插入单元,用于将键值对<key,value>插入所述第二存储区域中,将所述键值对<key,value>的键key与其在所述第二存储区域中的存储地址addr组成新的键值对<key,addr>,并利用所述LSM-tree插入单元插入所述键值对<key,addr>;
键值对插入单元,用于判断待插入的原始键值对的大小是否大于等于预设的第一阈值,若是,则利用所述内存池插入单元插入所述原始键值对;否则,利用所述LSM-tree插入单元插入所述原始键值对;
键值对删除单元,用于在所述第二存储区域中的键值对被删除时,将用于存储被删除键值对的存储单元标记为可重新插入键值对的空闲内存单元;
键值对迁移单元,用于在所述第二存储区域中存储的数据量高于预设的第二阈值时,将所述第二存储区域中访问最不频繁的键值对下刷到所述SSD中,并对所述第二存储区域中键值对的存储地址进行更新;
SSD垃圾回收单元,用于在对SSD进行垃圾回收时,遍历所述第三存储区域中的标志位段,将其中有效标志位率最小的标志位段所对应的数据段作为待回收的目标数据段;将所述目标数据段中所有的有效键值对写入新的数据段中后,释放所述目标数据段的存储空间;
其中,所述有效标志位率为标志位段中有效标志位的数量与总标志位的数量的比值。
CN202011222264.3A 2020-11-05 2020-11-05 减少键值分离存储系统的垃圾回收和写放大的方法及系统 Active CN112395212B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011222264.3A CN112395212B (zh) 2020-11-05 2020-11-05 减少键值分离存储系统的垃圾回收和写放大的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011222264.3A CN112395212B (zh) 2020-11-05 2020-11-05 减少键值分离存储系统的垃圾回收和写放大的方法及系统

Publications (2)

Publication Number Publication Date
CN112395212A CN112395212A (zh) 2021-02-23
CN112395212B true CN112395212B (zh) 2022-05-31

Family

ID=74598164

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011222264.3A Active CN112395212B (zh) 2020-11-05 2020-11-05 减少键值分离存储系统的垃圾回收和写放大的方法及系统

Country Status (1)

Country Link
CN (1) CN112395212B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112883124B (zh) * 2021-03-17 2022-12-02 重庆紫光华山智安科技有限公司 数据处理方法、装置、计算机设备及存储介质
CN113553476B (zh) * 2021-07-27 2023-05-26 南京邮电大学 一种利用哈希减少写停顿的键值存储方法
CN113568581B (zh) * 2021-07-29 2023-08-01 武汉天喻信息产业股份有限公司 一种嵌入式设备的多应用资源回收方法及系统
CN113821177B (zh) * 2021-10-11 2024-06-18 中山大学 一种基于nvm的lsm树的存储结构及其数据存储方法
CN114020707B (zh) * 2022-01-06 2022-06-14 阿里云计算有限公司 存储空间回收方法、存储介质及程序产品
CN116737612A (zh) * 2022-03-02 2023-09-12 华为技术有限公司 一种地址管理方法及存储装置
CN114896250B (zh) * 2022-05-19 2023-02-03 中国地质大学(北京) 一种键值分离的键值存储引擎索引优化方法及装置

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105138622B (zh) * 2015-08-14 2018-05-22 中国科学院计算技术研究所 用于lsm树存储系统的插入操作及负载的读取和合并方法
US10795871B2 (en) * 2016-09-26 2020-10-06 Vmware, Inc. Key-value stores implemented using fragmented log-structured merge trees
US10678768B2 (en) * 2017-06-30 2020-06-09 Intel Corporation Logical band-based key-value storage structure
US11436353B2 (en) * 2017-09-13 2022-09-06 Vmware, Inc. Merge updates for key value stores
CN109521959A (zh) * 2018-11-01 2019-03-26 西安交通大学 一种基于ssd-smr磁盘混合键值存储系统数据组织方法
CN109683811B (zh) * 2018-11-22 2020-05-19 华中科技大学 一种混合内存键值对存储系统的请求处理方法
US20200225882A1 (en) * 2019-01-16 2020-07-16 Alibaba Group Holding Limited System and method for compaction-less key-value store for improving storage capacity, write amplification, and i/o performance
US11372823B2 (en) * 2019-02-06 2022-06-28 President And Fellows Of Harvard College File management with log-structured merge bush
CN110347852B (zh) * 2019-06-06 2021-11-02 华中科技大学 嵌入横向扩展键值存储系统的文件系统及文件管理方法
CN110347336B (zh) * 2019-06-10 2020-07-10 华中科技大学 一种基于nvm与ssd混合存储结构的键值存储系统
CN110515957A (zh) * 2019-09-02 2019-11-29 深圳市网心科技有限公司 一种区块链数据存储的方法、系统、设备及可读存储介质
CN111026329B (zh) * 2019-11-18 2021-04-20 华中科技大学 基于主机管理瓦记录磁盘的键值存储系统及数据处理方法
CN111352908B (zh) * 2020-02-28 2023-10-10 北京奇艺世纪科技有限公司 基于lsm的数据存储方法、装置、存储介质及计算机设备
CN111309270B (zh) * 2020-03-13 2021-04-27 清华大学 一种持久性内存键值存储系统

Also Published As

Publication number Publication date
CN112395212A (zh) 2021-02-23

Similar Documents

Publication Publication Date Title
CN112395212B (zh) 减少键值分离存储系统的垃圾回收和写放大的方法及系统
US10303596B2 (en) Read-write control method for memory, and corresponding memory and server
US11100071B2 (en) Key-value store tree data block spill with compaction
US10915546B2 (en) Counter-based compaction of key-value store tree data block
CN107391774B (zh) 基于重复数据删除的日志文件系统的垃圾回收方法
US20100146213A1 (en) Data Cache Processing Method, System And Data Cache Apparatus
US20100332846A1 (en) Scalable indexing
EP1988474A1 (en) System and method of managing indexation of flash memory
CN106951375B (zh) 在存储系统中删除快照卷的方法及装置
CN108733306B (zh) 一种文件合并方法及装置
CN108628542B (zh) 一种文件合并方法及控制器
CN110968269A (zh) 基于scm与ssd的键值存储系统及读写请求处理方法
CN109407985B (zh) 一种数据管理的方法以及相关装置
CN104598386A (zh) 通过追踪和利用二级映射索引重复利用固态驱动器块
CN106776361B (zh) 一种面向大规模非易失性存储介质的缓存方法和系统
KR100907477B1 (ko) 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법
CN111610936B (zh) 一种对象存储平台以及对象聚合方法、装置和服务器
CN113253926A (zh) 提升新型存储器的查询和存储性能的存储内索引构建方法
Ross Modeling the performance of algorithms on flash memory devices
CN109086001B (zh) 一种NAND Flash垃圾回收方法及系统
WO2019136969A1 (zh) 一种实体位置映到逻辑映像位置的高效能方法
CN111258923B (zh) 一种基于异构混合内存系统的页面分配方法
CN114741028A (zh) 一种基于ocssd的持久键值存储方法、设备及系统
CN107506156B (zh) 一种块设备的io优化方法
KR101353967B1 (ko) 환형 구조의 비휘발성 메모리 캐쉬에 데이터를 읽고 쓰기 위한 데이터 처리 방법

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