CN114415966B - 一种kv ssd存储引擎的构建方法 - Google Patents
一种kv ssd存储引擎的构建方法 Download PDFInfo
- Publication number
- CN114415966B CN114415966B CN202210087663.6A CN202210087663A CN114415966B CN 114415966 B CN114415966 B CN 114415966B CN 202210087663 A CN202210087663 A CN 202210087663A CN 114415966 B CN114415966 B CN 114415966B
- Authority
- CN
- China
- Prior art keywords
- value
- nand
- command
- key
- mapping table
- 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
- 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- 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
- 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/064—Management of blocks
-
- 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/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- 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/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- 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/0683—Plurality of storage devices
- G06F3/0685—Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种KV SSD存储引擎的构建方法,NVMe命令接收、分发模块,从Host端接收NVMe操作命令队列,并将Get/Add/Update/List命令分发,接收更新、查询命令时,分发到内存索引表进行更新查询操作,内存索引表的数据定期刷新写入NAND持久化索引表,内存索引表接收到更新/查询命令后,将Key值指向的最新Value所对应的NAND物理地址,并在NAND持久化Value存储模块存储,NAND持久化Value存储模块返回Value数据到NVMe命令接收、分发模块。通过NVMe协议实现KV基本操作命令交互,驱动程序直接跟SSD交互KV操作,缩短内核冗长IO路径,降低延迟,提高并发度。
Description
技术领域
本申请属于固态硬盘技术领域,具体地,涉及一种用于KV SSD存储引擎的构建方法。
背景技术
大数据时代,非结构化数据迅猛增加,键值数据库得到广泛应用。数据以固定大小的块(SSD中最小的可擦除数据量)存储在SSD中,每个块都有自己的ID。但大多数真实世界的数据都是非结构化的,比如音乐,照片和zip文件。因此,SSD通常将对象数据(其大小可以大不相同)转换为具有这些块大小的数据片段。当某些数据发生变化时,整个块将被删除并重新编程。为了迎合实际使用模型,大多数真实世界的数据中心软件(使用键值存储,其中可变大小的键值指的是可变大小的数据集合。在编程中,这称为键值元组。换句话说,提交Key,然后放入或接收与Key相关联的数据。然而,关键值软件给主处理器带来了相当大的负担,因为它使用了宝贵的CPU资源。业界担心的是,随着SSD的速度不断提高,由于管理块和操作的负担而导致CPU开销受到瓶颈,系统级性能将会饱和。因此,Key Value SSD背后的想法是本地支持键值存储(KVS):每个Key可以直接寻址数据位置。这消除了诸如逻辑和物理块寻址之类的过程。KV SSD具有KV设备驱动程序而不是块设备驱动程序,可通过KV库访问。通过这种软件和硬件协同设计,资源可以从主机CPU移动到SSD。
而且许多应用程序需要低延迟的KV数据库存储,为了满足这一需求,通常使用基于DRAM后端的KV存储。然而,与传统的SSD相比,最近基于新型NVM技术的存储设备提供了前所未有的性能,KV-SSD展现了非常强的线性扩展能力,随着设备数量的增加,系统整体的TPS成线性增长。如果存在一个KV存储能够充分发挥这些设备本身的性能,那么将提供很多机会来加速应用程序并降低成本。然而,现有的KV存储,都是为较慢的SSD或HDD设备所构建,并不能充分利用快速NVM这类设备的性能。
目前常用的KV数据库存储引擎多基于日志结构,基于日志结构的KV存储系统能发挥SSD高性能存取数据的优点,通过日志结构合并随机写入,减少由于对SSD碎片化写入造成的写放大影响,还能支持范围查询。但目前的KV存储系统都是沿用之前磁盘存储的系统软件架构,IO路径冗长,不能充分发挥高性能SSD高并发、低延迟的性能优势。其次,基于日志结构的KV数据库本身也存在写放大问题,并且需要预留一部分可用空间用于垃圾回收,而在SSD内部,也需要采用日志结构原理合并随机写入,在可用空间不足时垃圾回收,同样需要预留可用空间,也会引起写放大。
再次,目前基于LSM-tree的KV存储引擎,由于垃圾回收时需要层层合并,写放大问题非常严重,在Key-Value对的Value长度较大时尤其明显。而随着半导体技术的发展,DDR内存价格整体呈下降趋势,企业级SSD通常都配备了大容量的DDR内存,因此可以充分利用SSD盘内大容量DDR内存来加速KV存储引擎。
发明内容
基于以上的现有技术缺陷,本发明的目的是提供一种可以减少KV存储系统写放大,提升并发能力,降低访问延迟的KV存储引擎构建方法。
本发明提出一种KV SSD存储引擎的构建方法,KV SSD的系统结构包括:Host端,可基于NVMe协议实现KV基本操作命令发送,NVMe命令接收、分发模块,内存索引表,NAND持久化索引表,NAND持久化Value存储模块,内存Value聚合写入模块,Value-Key反向映射表;
NVMe命令接收、分发模块,从Host端接收NVMe操作命令队列,并将Get/Add/Update/List命令分发,接收更新、查询命令时,分发到内存索引表进行更新查询操作,内存索引表的数据定期刷新写入NAND持久化索引表,内存索引表接收到更新/查询命令后,将Key值指向的最新Value所对应的NAND物理地址,并在NAND持久化Value存储模块存储,NAND持久化Value存储模块返回Value数据到NVMe命令接收、分发模块;
内存索引表,采用定长索引表项,全局Hash算法计算Key对应的索引地址,采用两级映射算法,第一级映射表设计成Key值LSM-tree结构,用于缓存部分新插入的Key,第二级映射表即为全局的Hash直接索引表,索引表项之间通过双向链表连接两个Key值相邻的表项,支持快速范围查询。
进一步地,接收到NVMe命令接收、分发模块的存入命令时,内存Value聚合写入模块,将Value数据写入内存Value聚合缓存成条带,条带缓存满则写入NAND中持久化Value存储;并通过Key值计算Hash索引找到DDR中的索引表项后,将Value地址指向当前NAND写入点,并更新Value-Key反向映射表集合的反向映射表,内存中的反向映射表,聚合到一定数量后紧接着Value写入NAND,NAND持久化Value存储。
进一步地,反向映射表用于垃圾回收时确定数据有效性,垃圾回收分为第一级缓存Key回收和NAND中Value回收,第一级缓存Key回收通过将内存中的一级映射表更新到二级全局映射表中快速完成;NAND中Value回收针对NAND写完成块,先读出反向映射表,通过比对反向映射表和索引表确定有效数据,完成垃圾回收,解决日志结构KV存储引擎中层层merge引起的写放大过大问题。
同时,反向映射表配合SSD内部掉电电容保护策略,系统下电时将该反向映射表和Value聚合条带写入NAND,保证数据和索引不丢失。
进一步地,接收到NVMe命令接收、分发模块的List命令时,根据第一级LSM-tree索引缓冲区和第二级全局索引表项中的Next指针两者结合,读下一个相邻Key的Value。
进一步地,接收到NVMe命令接收、分发模块的存入命令时,Value数据写入内存Value聚合缓存,待缓存满写入NAND,并更新反向映射表,通过Key值计算Hash索引找到DDR中的索引表项后,将Value地址指向当前NAND写入点。
进一步地,接收到NVMe命令接收、分发模块的更新命令时,直接更新第一级LSM-tree索引缓冲区和第二级全局索引表项。
进一步地,接收到NVMe命令接收、分发模块的新插入命令时,更新第二级全局索引表项,同时插入新的Key到第一级LSM-tree索引缓冲区。
进一步地,当前的NAND块写满后,将写满的聚合条带缓存和Value-key反向映射表写入新分配的当前NAND块,并且数据存储区和反向映射表相邻存放,可以通过Value-key反向映射表确定存储数据所属的Key值,便于垃圾回收、错误处理等操作时的数据提取和核实。
本发明通过NVMe协议实现KV基本操作命令交互,驱动程序直接跟SSD交互KV操作,缩短内核冗长IO路径,降低延迟,提高并发度;SSD内部去除复杂的FTL算法,解决FTL和KV存储引擎双重写放大和保留空间浪费问题,同时节省映射表占用的DDR内存空间,因此SSD内部的DDR内存主要用来存储KV存储引擎索引表,减少主机内存占用;采用定长索引表项,全局Hash算法计算Key对应的索引地址,采用两级映射算法,避免全局Key-Value整体采用LSM-tree结构造成的读写放大问题;采用Key和Value分开存储的方式,Value不占用内存,减少内存占用,并将Value聚合成条带写入NAND,进一步降低随机写造成的写放大;设计反向映射表,当Value聚合到一定长度时将映射表写入NAND,该反向映射表用于垃圾回收时确定数据有效性,同时,配合SSD内部掉电电容保护策略,系统下电时将该反向映射表和Value聚合条带写入NAND,保证数据和索引不丢失,简化了KV存储引擎复杂的日志机制;定期将DDR内存中的索引表刷到NAND中,加速掉电重建过程,同时基本不影响正常IO操作;垃圾回收分为第一级缓存Key回收和NAND中Value回收,解决日志结构KV存储引擎中层层merge引起的写放大过大问题。
本发明与背景技术相比,具有的有益的效果是:
通过在SSD内部实现KV存储引擎,缩短KV存储系统IO路径,减少读写延迟,提高并发能力,简化系统软件设计;通过去除KV存储引擎和SSD内部的双重日志机制,提高存储利用率,降低成本;通过利用SSD内部大容量DDR内存设计的双层映射机制,Key和Value分离策略,减少读写放大问题。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
本说明书附图所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本申请可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本申请所能产生的功效及所能达成的目的下,均应仍落在本申请所揭示的技术内容得能涵盖的范围内。
图1为本申请KV SSD的系统结构示意图;
图2为本申请KV SSD的索引结构设计之内存索引布局示意图;
图3为本申请KV SSD的索引结构设计之内存索引链表结构示意图;
图4为本申请实施例的KV SSD的Value数据存储布局示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请中的实施例进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本发明是本发明提出一种KV SSD存储引擎的构建方法本发明通过NVMe协议实现KV基本操作命令交互,驱动程序直接跟SSD交互KV操作,缩短内核冗长IO路径,降低延迟,提高并发度;SSD内部去除复杂的FTL算法,解决FTL和KV存储引擎双重写放大和保留空间浪费问题,同时节省映射表占用的DDR内存空间,因此SSD内部的DDR内存主要用来存储KV存储引擎索引表,减少主机内存占用;采用定长索引表项,全局Hash算法计算Key对应的索引地址,采用两级映射算法,避免全局Key-Value整体采用LSM-tree结构造成的读写放大问题;采用Key和Value分开存储的方式,Value不占用内存,减少内存占用,并将Value聚合成条带写入NAND,进一步降低随机写造成的写放大;设计反向映射表,当Value聚合到一定长度时将映射表写入NAND,该反向映射表用于垃圾回收时确定数据有效性,同时,配合SSD内部掉电电容保护策略,系统下电时将该反向映射表和Value聚合条带写入NAND,保证数据和索引不丢失,简化了KV存储引擎复杂的日志机制;定期将DDR内存中的索引表刷到NAND中,加速掉电重建过程,同时基本不影响正常IO操作;垃圾回收分为第一级缓存Key回收和NAND中Value回收,解决日志结构KV存储引擎中层层merge引起的写放大过大问题。
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
实施例1
如图1所示,为本申请KV SSD的系统结构示意图,KV SSD的系统结构包括:Host端,可基于NVMe协议实现KV基本操作命令发送,NVMe命令接收、分发模块,内存索引表,NAND持久化索引表,NAND持久化Value存储模块,内存Value聚合写入模块,Value-Key反向映射表。内存中的索引映射表,定期刷入到NAND中,加速下电后系统重建。内存中的Value聚合缓存,当聚集到一个NAND写入条带时写入NAND中的映射表区,内存中的反向映射表,聚集到一定数量后紧接着Value写入NAND。接收更新、查询命令时,分发到内存索引表进行更新查询操作,内存索引表的数据定期刷新写入NAND持久化索引表,内存索引表接收到更新/查询命令后,将Key值指向的最新Value所对应的NAND物理地址,并在NAND持久化Value存储模块存储,NAND持久化Value存储模块返回Value数据到NVMe命令接收、分发模块。内存索引表,采用定长索引表项,全局Hash算法计算Key对应的索引地址,采用两级映射算法,第一级映射表设计成Key值LSM-tree结构,用于缓存部分新插入的Key,第二级映射表即为全局的Hash直接索引表,索引表项之间通过双向链表连接两个Key值相邻的表项,支持快速范围查询。接收到NVMe命令接收、分发模块的存入命令时,内存Value聚合写入模块,将Value数据写入内存Value聚合缓存成条带,条带缓存满则写入NAND中的映射表区并持久化Value存储;并通过Key值计算Hash索引找到DDR中的索引表项后,将Value地址指向当前NAND写入点,并更新Value-Key反向映射表集合的反向映射表,内存中的反向映射表,聚合到一定数量后紧接着Value写入NAND,NAND持久化Value存储。
第一级映射表LSM-Tree结构收到写数据请求时,会把该条Key写入内存的Key缓存块里面(删除是标记Key删除,更新是新记录一条Key),也称Memtable;当Memtable超过一定的大小后,会在内存里面冻结,变成不可变的Memtable,同时为了不阻塞写操作需要新生成一个Memtable继续提供服务;把内存里面不可变的Memtable合并到第二层Memtable中,此步骤也称为Minor Compaction,这里需要注意在L0层的Memtable是没有进行合并的,所以这里的key range在多个Memtable中可能会出现重叠,在层数大于0层之后的Memtable,不存在重叠key;Major Compaction,当每层的缓存的Memtable的体积超过一定的大小或者个数,也会周期的进行合并,这个阶段会真正的清除掉被标记删除掉的数据以及多版本数据的合并,避免浪费缓存空间,Memtable都是有序的,我们可以直接采用merge sort进行高效合并。第一级映射表LSM-Tree结构用于维护新插入Key的顺序关系,因此新插入Key时不需要搜索第二级全局映射表前后Key,而且在更新到第二级全局映射表时可以批量更新,因为全部是内存操作速度很快,在第二级映射设计为全局的Hash直接索引表数据读写时,可以降低直接索引的写放大,数据量很小,总体的放大效果明显降低。
分别地,读命令时利用全局Hash算法计算Key对应的索引地址,找到DDR中的索引表项,读出Key值对应Value所在NAND中的物理地址PBA、上一个相邻Key的索引表项指针、下一个相邻Key的索引表项指针等数据;
对于List命令,根据第一级LSM-tree索引缓冲区和第二级全局索引表项中的Next指针两者结合,读下一个相邻Key的Value;
对于存入命令,Value数据写入内存Value聚合缓存,待缓存满写入NAND,并更新反向映射表,通过Key值计算Hash索引找到DDR中的索引表项后,将Value地址指向当前NAND写入点;
对于更新命令,直接更新第一级LSM-tree索引缓冲区和第二级全局索引表项就可以;
对于新插入命令,更新第二级全局索引表项,同时插入新的Key到第一级LSM-tree索引缓冲区。
反向映射表用于垃圾回收时确定数据有效性,垃圾回收分为第一级缓存Key回收和NAND中Value回收,第一级缓存Key回收通过将内存中的一级映射表更新到二级全局映射表中快速完成;NAND中Value回收针对NAND写完成块,先读出反向映射表,通过比对反向映射表和索引表确定有效数据,完成垃圾回收,解决日志结构KV存储引擎中层层merge引起的写放大过大问题。
如图2、3所示,分别为本申请KV SSD的索引结构设计之内存索引布局示意图和内存索引链表结构示意图。如图2内存索引布局示意图所示,KV SSD的索引结构包括第一级映射表设计成Key值LSM-tree结构,用于缓存部分新插入的Key,第二级映射表为全局的Hash直接索引表,索引表项之间通过双向链表连接两个Key值相邻的表项。
如图3内存索引链表结构示意图所示,双向链表表头节点Head,包含表头节点的Next与下一个相邻Key的索引表项指针的Prev链路指向,表头节点的Prev指向表末端的Prev,索引链表的不包含表头节点外的所有节点,从表头节点端开始Prev依次形成链路,并从表末端的Next往表头节点端依次形成链路。
Key-Value命令输入后,通过Hash找到Key对应的索引表项,每个索引表项包含补齐到定长后的Key值、NAND物理地址PBA、Value的大小Size、上一个相邻Key的索引表项指针、下一个相邻Key的索引表项指针构成;对于更新命令,直接更新第一级LSM-tree索引缓冲区和第二级Hash全局索引表项,对于新插入命令,更新第二级Hash全局索引表项,包含补齐到定长后的Key值、NAND物理地址PBA、Value的大小Size、上、下一个相邻Key的索引表项指针,同时插入新的Key到第一级LSM-tree索引缓冲区。
如图4所示,为本申请实施例的KV SSD的Value数据存储布局示意图,内存Value聚合写入模块数据存储,将Value数据写入内存Value聚合缓存成条带,条带缓存满则写入NAND,对每组写满的条带反向建立Value-key映射表,当前的NAND块写满后,将写满的聚合条带缓存和Value-key映射表写入新分配的当前NAND块,并持久化Value存储。
将分离后的Value聚合,能紧密排布,方便后续优化的压缩操作,数据存储区和反向映射表相邻存放,可以通过反向映射表确定存储数据所属的Key值,便于垃圾回收、错误处理等操作时的数据提取和核实。
本说明书中各个实施例采用递进、或并列、或递进和并列结合的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
需要说明的是,在本申请的描述中,需要理解的是,术语“上”、“下”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。当一个组件被认为是“连接”另一个组件,它可以是直接连接到另一个组件或者可能同时存在居中设置的组件。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括上述要素的物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种KV SSD存储引擎的构建方法,其特征在于,KV SSD的系统结构包括:Host端,可基于NVMe协议实现KV基本操作命令发送,NVMe命令接收、分发模块,内存索引表,NAND持久化索引表,NAND持久化Value存储模块,内存Value聚合写入模块,Value-Key反向映射表;
NVMe命令接收、分发模块,从Host端接收NVMe操作命令队列,并将Get/Add/Update/List命令分发,接收更新、查询命令时,分发到内存索引表进行更新查询操作,内存索引表的数据定期刷新写入NAND持久化索引表,内存索引表接收到更新/查询命令后,将Key值指向的最新Value所对应的NAND物理地址,并在NAND持久化Value存储模块存储,NAND持久化Value存储模块返回Value数据到NVMe命令接收、分发模块;
内存索引表,采用定长索引表项,全局Hash算法计算Key对应的索引地址,采用两级映射算法,第一级映射表设计成Key值LSM-tree结构,用于缓存部分新插入的Key,第二级映射表即为全局的Hash直接索引表,索引表项之间通过双向链表连接两个Key值相邻的表项,支持快速范围查询。
2.根据权利要求1所述的KV SSD存储引擎的构建方法,其特征在于:接收到NVMe命令接收、分发模块的存入命令时,内存Value聚合写入模块,将Value数据写入内存Value聚合缓存成条带,条带缓存满则写入NAND中的持久化Value存储;并通过Key值计算Hash索引找到DDR中的索引表项后,将Value地址指向当前NAND写入点,并更新Value-Key反向映射表集合的反向映射表,内存中的反向映射表,聚合到一定数量后紧接着Value写入NAND,NAND持久化Value存储。
3.根据权利要求1所述的KV SSD存储引擎的构建方法,其特征在于:反向映射表用于垃圾回收时确定数据有效性,垃圾回收分为第一级缓存Key回收和NAND中Value回收。
4.根据权利要求3所述的KV SSD存储引擎的构建方法,其特征在于:第一级缓存Key回收通过将内存中的一级映射表更新到二级全局映射表中快速完成;NAND中Value回收针对NAND写完成块,先读出反向映射表,通过比对反向映射表和索引表确定有效数据,完成垃圾回收,解决日志结构KV存储引擎中层层merge引起的写放大过大问题。
5.根据权利要求3所述的KV SSD存储引擎的构建方法,其特征在于:反向映射表配合SSD内部掉电电容保护策略,系统下电时将该反向映射表和Value聚合条带写入NAND,保证数据和索引不丢失。
6.根据权利要求1所述的KV SSD存储引擎的构建方法,其特征在于:接收到NVMe命令接收、分发模块的List命令时,根据第一级LSM-tree索引缓冲区和第二级全局索引表项中的Next指针两者结合,读下一个相邻Key的Value。
7.根据权利要求1所述的KV SSD存储引擎的构建方法,其特征在于:接收到NVMe命令接收、分发模块的存入命令时,Value数据写入内存Value聚合缓存,待缓存满写入NAND,并更新反向映射表,通过Key值计算Hash索引找到DDR中的索引表项后,将Value地址指向当前NAND写入点。
8.根据权利要求1所述的KV SSD存储引擎的构建方法,其特征在于:接收到NVMe命令接收、分发模块的更新命令时,直接更新第一级LSM-tree索引缓冲区和第二级全局索引表项。
9.根据权利要求1所述的KV SSD存储引擎的构建方法,其特征在于:接收到NVMe命令接收、分发模块的新插入命令时,更新第二级全局索引表项,同时插入新的Key到第一级LSM-tree索引缓冲区。
10.根据权利要求2所述的KV SSD存储引擎的构建方法,其特征在于:当前的NAND块写满后,将写满的聚合条带缓存和Value-key反向映射表写入新分配的当前NAND块,并且数据存储区和反向映射表相邻存放,可以通过Value-key反向映射表确定存储数据所属的Key值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210087663.6A CN114415966B (zh) | 2022-01-25 | 2022-01-25 | 一种kv ssd存储引擎的构建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210087663.6A CN114415966B (zh) | 2022-01-25 | 2022-01-25 | 一种kv ssd存储引擎的构建方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114415966A CN114415966A (zh) | 2022-04-29 |
CN114415966B true CN114415966B (zh) | 2022-08-12 |
Family
ID=81276986
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210087663.6A Active CN114415966B (zh) | 2022-01-25 | 2022-01-25 | 一种kv ssd存储引擎的构建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114415966B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115793989B (zh) * | 2023-02-06 | 2023-06-20 | 江苏华存电子科技有限公司 | 一种基于NAND的NVMe KV SSD数据管理方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309270A (zh) * | 2020-03-13 | 2020-06-19 | 清华大学 | 一种持久性内存键值存储系统 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9582431B2 (en) * | 2010-03-22 | 2017-02-28 | Seagate Technology Llc | Storage address space to NVM address, span, and length mapping/converting |
US9507711B1 (en) * | 2015-05-22 | 2016-11-29 | Sandisk Technologies Llc | Hierarchical FTL mapping optimized for workload |
US10126964B2 (en) * | 2017-03-24 | 2018-11-13 | Seagate Technology Llc | Hardware based map acceleration using forward and reverse cache tables |
US10678768B2 (en) * | 2017-06-30 | 2020-06-09 | Intel Corporation | Logical band-based key-value storage structure |
US20190042098A1 (en) * | 2018-06-08 | 2019-02-07 | Intel Corporation | Reduction of write amplification of ssd with integrated memory buffer |
CN110347336B (zh) * | 2019-06-10 | 2020-07-10 | 华中科技大学 | 一种基于nvm与ssd混合存储结构的键值存储系统 |
KR20210075731A (ko) * | 2019-12-13 | 2021-06-23 | 삼성전자주식회사 | 스토리지 장치 및 이의 동작 방법 |
KR20210081888A (ko) * | 2019-12-24 | 2021-07-02 | 삼성전자주식회사 | 키-밸류 기반으로 데이터를 저장하는 스토리지 장치 및 이의 동작 방법 |
CN113094292B (zh) * | 2020-01-09 | 2022-12-02 | 上海宝存信息科技有限公司 | 数据存储装置以及非挥发式存储器控制方法 |
US11301321B2 (en) * | 2020-05-28 | 2022-04-12 | Western Digital Technologies, Inc. | Data shaping for integrated memory assembly |
-
2022
- 2022-01-25 CN CN202210087663.6A patent/CN114415966B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309270A (zh) * | 2020-03-13 | 2020-06-19 | 清华大学 | 一种持久性内存键值存储系统 |
Non-Patent Citations (1)
Title |
---|
一种基于NVMeoF存储池的分域共享并发存储架构;李琼等;《计算机工程与科学》;20201015(第10期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114415966A (zh) | 2022-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
US9449005B2 (en) | Metadata storage system and management method for cluster file system | |
EP2454691B1 (en) | Database storage architecture | |
US20170212680A1 (en) | Adaptive prefix tree based order partitioned data storage system | |
US20220382760A1 (en) | High-performance key-value store | |
WO2013174305A1 (zh) | 基于SSD的Key-Value型本地存储方法及系统 | |
US11449430B2 (en) | Key-value store architecture for key-value devices | |
US20190347209A1 (en) | Storage of database column data in non-volatile memory | |
Fevgas et al. | Indexing in flash storage devices: a survey on challenges, current approaches, and future trends | |
Sarwat et al. | FAST: a generic framework for flash-aware spatial trees | |
Sarwat et al. | Generic and efficient framework for search trees on flash memory storage systems | |
CN109165321B (zh) | 一种基于非易失内存的一致性哈希表构建方法和系统 | |
Amur et al. | Design of a write-optimized data store | |
CN114415966B (zh) | 一种kv ssd存储引擎的构建方法 | |
Zuo et al. | Level hashing: A high-performance and flexible-resizing persistent hashing index structure | |
CN112732725B (zh) | 基于nvm混合内存的自适应前缀树构建方法及其系统、介质 | |
CN114996275A (zh) | 一种基于多树转换机制的键值存储方法 | |
WO2022037015A1 (zh) | 一种基于持久性内存的列式存储方法、装置及设备 | |
CN115774699B (zh) | 数据库共享字典压缩方法、装置、电子设备及存储介质 | |
Kim et al. | Optimizing key-value stores for flash-based ssds via key reshaping | |
Fevgas et al. | A study of R-Tree performance in hybrid flash/3DXPoint storage | |
CN116382588A (zh) | 一种基于学习索引的LSM-Tree存储引擎读放大问题优化方法 | |
Lu et al. | Revisiting lsm-tree-based key-value stores for ZNS ssds | |
Zhang et al. | Optimizing adaptive radix trees for NVM-based hybrid memory architecture | |
Liu et al. | Design considerations of A novel distributed key-value store for new 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 |