CN111399777B - 一种基于数据值分类的差异化键值数据存储方法 - Google Patents
一种基于数据值分类的差异化键值数据存储方法 Download PDFInfo
- Publication number
- CN111399777B CN111399777B CN202010182605.2A CN202010182605A CN111399777B CN 111399777 B CN111399777 B CN 111399777B CN 202010182605 A CN202010182605 A CN 202010182605A CN 111399777 B CN111399777 B CN 111399777B
- Authority
- CN
- China
- Prior art keywords
- data
- file
- value
- ordered
- files
- 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
- 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/0644—Management of space entities, e.g. partitions, extents, pools
-
- 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/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—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/90—Details of database functions independent of the retrieved data types
- G06F16/906—Clustering; Classification
-
- 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/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/0674—Disk device
- G06F3/0676—Magnetic disk device
-
- 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)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于数据值分类的差异化键值数据存储方法,特征是包括键值数据的分类存储、有序文件的分层管理、优化底层数据值的局部有序性、差异化的磁盘空间回收策略步骤,通过对不同大小的数据值进行分类并采用键值分离结构以不同的有序性存储,使得该系统在充分降低数据合并带来的开销的同时,支持对数据进行高效的点查询以及范围查询;通过有序文件的分层管理以及局部有序性优化,实现了以尽可能小的开销保障系统中绝大多数有序文件在范围查询时可以顺序读取;利用差异化的磁盘空间回收策略能快速识别并回收系统中无效数据最密集的文件,并规避了中小数据值在空间回收过程中对数据索引的频繁读写,从而可以高效回收和利用存储空间。因此,采用本发明方法所设计的键值存储系统可以在读、写及空间开销等性能指标上均表现优异。
Description
技术领域
本发明属于计算机存储系统技术领域,具体涉及在键值存储系统(KV Stores)中,将键值(Key-Value)数据进行分类并采用差异化的存储方法,实现高性能、低空间开销的键值存取方法。
背景技术
据谷歌(Google)、脸书(Facebook)等公司的介绍,为了适应新型网络应用和服务中海量非结构化与半结构化数据的存储需求,基于键值(Key-Value)模型的存储系统近年来被广泛使用,包括谷歌的LevelDB、脸书的RocksDB、淘宝的Tair等均采用了键值存储模型。这些主流的键值存储系统都采用日志结构合并树(LSM-Tree)作为其核心存储结构,这种结构将键值数据在磁盘上组织成多层,通过层间压缩(Compaction)操作来保证数据在各层内的绝对有序。但是频繁的Compaction操作会导致严重的写放大(WriteAmplification)问题,为了解决该问题,目前存在两种主流技术研究方向:一是放松LSM-Tree中存储键值对(KV Pair)的层内有序性要求,每次Compaction操作仅合并同一层中的数据追加到下一层,允许层内数据范围重叠,如德克萨斯大学奥斯汀分校的PebblesDB;二是采用键值分离的存储结构,仅维护有序的键(Key)作为索引,将数据值(Value)按写入顺序存储在分离的日志文件中,如威斯康星大学的WiscKey。这些研究采取的方法虽然降低了系统的写入开销,但均在不同程度上影响了读性能,包括点查询及范围查询,并且显著增加了磁盘空间开销。随着网络中数据规模的急剧增长,为了适应新型网络应用的性能需要以及降低存储成本,需要键值存储系统同时具备高读写性能,以及较低的空间开销。
发明内容
本发明的目的是为键值存储系统提供一种基于数据值分类的差异化键值数据存储方法,以尽可能低的维护开销保障数据的读取性能,并实现高效的空间回收,克服现有技术不能同时保障高读写性能以及低空间开销的缺陷。
本发明基于数据值分类的差异化键值数据存储方法,其特征在于包括以下步骤:
第一步:键值数据的分类存储
采用数据值(Value)的分类方法,将键值数据按数据值大小分成大、中、小三类,并以键值分离的存储结构将数据值分别存储在磁盘上的无序数据区、有序数据区以及索引区三个不同区域:
所述无序数据区,由一系列无序文件组成,存储大数据值,数据值在文件内按写入顺序存储;
所述有序数据区,由一系列有序文件组成,存储中数据值,数据值在文件内部按照键(Key)的字典序排列,不同有序文件之间可以存在范围重叠;
所述索引区,结构为日志结构合并树(LSM-Tree),保存小键值对本身,以及大、中数据值在数据区中的位置;
所述数据值的分类方法为:以近似数据值的位置索引大小作为小键值对的最大数据值大小SmallThreshold,并根据存储介质的并发随机读取性能设置大键值对的最小数据值大小LargeThreshold,满足当数据值大于LargeThreshold时并发随机读取性能接近顺序读取;数据值文件的大小限制为MaxFileSize,其值应小于LSM-Tree中数据文件的大小;键值对在写入时遵循以下流程:
(1)判断键值数据类型,将中小键值对直接写入LSM-Tree的写缓存(Memtable)中,将大键值对追加写入最新无序文件,并在成功写入后将其位置索引<key,value位置>写入写缓存;每当无序文件大小达到MaxFileSize时生成下一个文件;
(2)当写缓存写满刷盘时,生成新的有序文件,按键的字典序写入中数据值,同时记录中数据值在文件中的位置<key,value位置>;每当有序文件达到MaxFileSize时生成下一个文件;
(3)将写缓存中的小键值对,和其他数据值的位置索引<key,value位置>一起写入LSM-Tree中;
第二步:有序文件的分层管理
将有序文件逻辑上分为三层,LSM-Tree最后两层的中数据值分别仅存储在第1层与第2层有序文件中,LSM-Tree其余各层的中数据值仅存储在第0层有序文件中;分层操作在LSM-Tree触发输出层为最后两层的Compaction时执行,将Compaction数据中输入层的中数据值合并排序重写到对应输出层的有序文件中;具体方法为:
(1)每当生成有序文件时记录其所在层数,从写缓存刷盘生成的有序文件为第0层;
(2)当LSM-Tree执行Compaction时,若输出层为最后两层,则对于输入数据中顺序遍历到的每个中键值对,若其数据值所在的有序文件的层数低于输出层索引的有序文件层,或该文件被标记为需要合并,则将数据值写入新生成的对应输出层的有序文件中;关于需要合并标记在第三步和第四步中说明;
(3)Compaction在保存输出数据时更新中数据值的位置;
第三步:优化底层数据值的局部有序性
每当LSM-Tree完成一次底层的Compaction后,查看本次Compaction的输出数据索引的有序文件间的范围重叠情况,若在某个键区间内相互重叠的有序文件数量超过了限定值MaxOverlap,则将这些文件加上需要合并标记,在下一次涉及该区间的Compaction中,有序文件的分层操作合并这些文件中的数据值,无论这些文件属于哪一层;
第四步:差异化的磁盘空间回收策略
对于被更新、重写或删除而无效的数据,键、小数据值和数据值位置在Compaction时删除;对于中、大数据值,通过在Compaction过程中监控无效数据值在文件中的分布情况来调度并执行空间回收;监控步骤为:
(1)内存中维护一个元数据表记录每个数据值文件(即有序文件或无序文件)的类型和无效数据量;
(2)在每次Compaction过程中,对于输入数据索引的每个数据值文件D,记录输入数据保存在其中的数据值大小Di和输出数据保存在其中的数据值大小Do;
(3)在Compaction结束时,将各文件D的无效数据量增加Di–Do,文件的无效数据占比为无效数据量除以总数据量;
(4)若Compaction中分层操作产生了新的有序文件,将其加入元数据表,无效数据量为0;
在Compaction结束后,对无效数据占比超过MaxInvalidRatio的数据值文件执行空间回收调度,方法为:
(1)若无效数据占比为1,将文件删除,结束调度;
(2)若该文件为有序文件,将其标记为需要合并,在接下来的分层操作中重写该文件中的有效数据值,使其无效数据占比成为1从而被删除;
(3)若该文件为无序文件,将其加入空间回收队列中等待处理;
后台空间回收线程持续从空间回收队列中取出无效数据占比最高的文件执行回收:遍历文件中存储的大键值对,使用键向LSM-Tree查询数据值位置是否与本文件一致从而判断数据是否有效,将有效数据重新写入新的无序文件并向LSM-Tree更新位置,最后删除该文件。
上述本发明的这种基于数据值分类的差异化键值数据存储方法,特征是包括键值数据的分类存储、有序文件的分层管理、优化底层数据值的局部有序性、差异化的磁盘空间回收策略步骤,通过对不同大小的数据值进行分类并采用键值分离结构以不同的有序性存储,使得该系统在充分降低数据合并带来的开销的同时,支持对数据进行高效的点查询以及范围查询;通过有序文件的分层管理以及局部有序性优化,实现了以尽可能小的开销保障系统中绝大多数有序文件在范围查询时可以顺序读取;利用差异化的磁盘空间回收策略能快速识别并回收系统中无效数据最密集的文件,并规避了中小数据值在空间回收过程中对数据索引的频繁读写,从而可以高效回收和利用存储空间。因此,采用本发明方法所设计的键值存储系统可以在读、写及空间开销等性能指标上均表现优异。
附图说明
图1是本发明基于数据值分类的差异化键值数据存储方法的整体架构示意图。
图2是有序文件的分层操作示意图。
图3是有序文件的局部有序性维护示意图。
图4是无效数据的监控方法示意图。
图5是无序文件空间回收过程示意图。
具体实施方式
下面结合附图通过具体实施例对本发明基于数据值分类的差异化键值数据存储方法作进一步的详细说明。
实施例1:
本实施例通过写入及维护键值数据来展示本发明基于数据值分类的差异化键值数据存储方法的操作流程。图1给出了本实施例基于数据值分类的差异化键值数据存储方法的整体架构示意图,包括内存中的写缓存、数据值文件元数据表、磁盘上的各数据分区(索引区,有序数据区,无序数据区)等部分,并标示了键值数据的分类存储流程。
在本实施例中,系统使用三星860EVOSSD作为底层存储介质,其并发进行8KB以上随机读取的吞吐量达到顺序读取的四分之三以上,因此将LargeThreshold设置为8KB。其他相关参数为:SmallThreshold为128B,因此129B~8KB之间的数据值为中数据值;MaxOverlap通常设置为10以获取较好的性能表现,在本实施例中设置为2以便于讲述;MaxInvalidRatio设为0.3;MaxFileSize设为8MB。
本实施例基于数据值分类的差异化键值数据存储方法,具体包括以下步骤:
第一步:键值数据的分类存储
将键值对按数据值(Value)大小分成大、中、小三类,其中大、中键值对采用键值分离的存储方法保障较低的数据合并开销,其数据值分别存储在无序数据区和有序数据区,键(Key)与数据值的位置索引保存在索引区的LSM-Tree中;小键值对直接保存在LSM-Tree中。
在本实施例中,当向系统写入键值对<key,value>时执行大键值对的分离存储(图1大键值对分离存储①):首先判断value是否大于LargeThreshold,本实施例中LargeThreshold参数为8KB,若value大于8KB则该键值对为大键值对,将整个键值对追加写入到无序数据区的最新文件中,存储格式为[key大小,key,value大小,value],若写入后文件大小达到MaxFileSize(本实施例中为8MB),则生成一个新的无序文件保存后续数据,在写入文件成功后,向写缓存中写入value在无序文件中的位置信息<key,value位置>,假设写入的无序文件为003,则value位置的格式为[003,value在003中的地址,value大小];若value小于8KB,直接将<key,value>写入写缓存中。
直到写缓存写满后,将其转换为锁定的写缓存(Immutable Memtable)并在后台刷盘,刷盘时会按序遍历写缓存中的各键值对<key,value>,并执行中键值对的分离存储(图1中键值对的分离存储②):首先判断value是否大于SmallThreshold,本实施例中SmallThreshold参数为128B,若value不大于128B或该键值对为大数据值的位置信息,则将<key,value>写入LSM-Tree中,否则该键值对为中键值对,将value写入新生成的第0层有序文件中,注意相比无序文件,有序文件中仅需要保存value本身,因为有序文件不需要其他的信息来执行空间回收(参见第四步与第五步)。同样,若该有序文件大小达到8MB则继续生成下一个文件,将value写入有序文件后接着将其在有序文件中的位置信息<key,value位置>写入到LSM-Tree中,位置格式与大数据值的位置信息相同。
键值数据的分类存储一方面利用键值分离的结构减小了LSM-Tree的写放大开销,并且利用LSM-Tree保存数据值的位置可以支持快速点查询操作;另一方面系统仅需维护中小数据值的有序性,开销较小,而磁盘在并发随机读取大数据值时性能接近顺序读取,因此整个系统能够同时拥有较高的点查询、范围查询、写性能。此外通过限制数据值文件的大小,在空间回收步骤中能够以更小的粒度来执行调度。
第二步有序文件的分层管理
随着数据规模增大,有序数据区第0层的文件越来越多,由于有序文件互相之间并非完全有序,范围查询性能会越来越差。通过分层管理的方式定期合并有序文件来强化有序数据区的整体有序性(图1有序文件的合并③):将有序文件逻辑上分为三层,LSM-Tree最后两层的中数据值分别仅存储在第1层与第2层有序文件中,LSM-Tree其余各层的中数据值仅存储在第0层有序文件中;分层操作在LSM-Tree触发输出层为最后两层的Compaction时执行,将Compaction数据中输入层的中数据值合并排序重写到对应输出层的有序文件中。
图2展示了有序文件分层操作中数据值的合并过程,图中左侧为LSM-Tree的最后两层,这里没有详细画出各个文件,右侧为最后两层(即第1层与第2层)的部分有序文件,其中第2层中有两个文件被标记为需要合并,阴影部分为某次Compaction涉及的数据,图中省略了无序数据区,因为和分层操作无关。Compaction会按序遍历所有阴影部分的键值对,对于遇到的每一个中键值对,若其数据值保存在第1层的有序文件中,或者其所在的有序文件存在需要合并标记,则将其数据值写入新的有序文件中(图2有序文件的合并③)。在Compaction结束后,这些新生成的文件加入第2层有序文件中。通过这种方法,第1层的数据被重新整理排序,并且Compaction输出数据中的中数据值全部被保存在了第2层有序文件中。输出层为倒数第二层的分层操作与图示类似,更上层的Compaction不会触发分层操作。
每次分层操作完成后,数据值在新生成的有序文件间是完全有序的。由于LSM-Tree中上下层的数据量差距约为10倍,通过将有序数据区分成三层,系统中约99%的中数据值的有序性得到了维护。同时,除被标记的文件外,有序文件只在向下层流动时被合并一次,合并的写开销较小。
第三步优化数据值的局部有序性
分层合并为有序数据的整体有序性提供了保障,但是,若系统中存在某些键区间的数据被频繁写入或更新,在这些区间内重叠的有序文件会显著多于系统的其他部分,对这些区间的范围查询会退化成随机读取,影响性能,因此需要进行局部的优化:每当LSM-Tree完成一次底层的Compaction后,查看本次Compaction的输出数据索引的有序文件间的范围重叠情况,若在某个键区间内相互重叠的有序文件数量超过了限定值MaxOverlap,则将这些文件加上需要合并标记,在下一次涉及该区间的分层操作中,让被标记文件中的数据值参与合并,无论这些文件属于哪一层,从而使这些区间的重叠文件数量降低到1。
图3是有序数据值局部有序性维护示意图,图中上部为本实施例中某次底层Compaction输出数据的中数据值所在的有序文件,这些文件中数据的键区间分别为[a,b]、[a,e]、[c,e]、[c,h]、[f,h]、[i,j]、[i,k]、[m,o];中部为对这些文件的键区间排序整理后的范围重叠情况;下部标出了需要参与分层合并的文件。从排序后的结果可以发现3个有序文件在键区间[c,d]内存在重叠,超过了本实施例的MaxOverlap参数,因此将包含该区间的有序文件(即键区间为[a,e]、[c,e]、[c,h]的有序文件)标记为需要合并,在接下来涉及这些键区间的分层操作中,这些文件中的数据值将会被合并到新的有序文件中,因此这些区间的重叠文件数量会降低到1。
由于第二步保证了上层的有序文件一定会在分层操作中被合并且上层的Compaction频率较高,因此对局部有序性的优化操作仅在底层Compaction后执行,以减少开销。
第四步差异化的磁盘空间回收策略
随着系统中键值对被更新、重写或删除,数据值文件中的无效数据越来越多,需要回收这些数据占据的空间。由于键值对的更新和删除都是在LSM-Tree的Compaction过程中发生的,且键、小数据值和数据值位置都保存在LSM-Tree中,因此可以在Compaction时直接删除;对于中、大数据值,数据值位置信息中记录了数据值的大小及所在文件,可以通过监控数据值文件的无效数据量在Compaction前后的变化,对不同类型文件执行差异化的空间回收调度。
图4是数据值文件的无效数据监控方法示意图,图中左侧表示LSM-Tree中第i层与第i+1层间发生的一次Compaction,中部为Compaction的输入数据和输出数据在数据值文件中的分布情况,右侧为Compaction结束后对元数据表的更新。元数据表常驻内存,记录了各数据值文件的类型、大小、以及无效数据量。在本实施例中,Compaction的数据在文件002中的数据量从6MB降低到0,因此将其无效数据由原2MB更新为8MB。同理,将文件003的无效数据更新为4MB,004的无效数据更新为5MB。同时,分层操作生成了一个新的有序文件005,因此将005加入到元数据表中。
在Compaction结束后根据各数据值文件无效数据量的变化执行空间回收调度。本实施例中,有序文件002的无效数据占比达到1,因此将其删除。文件003,004的无效数据占比超过了MaxInvalidRatio(在本实施例中为0.3),需要回收空间。其中003是有序文件,为其加上需要合并标记,该文件的有效数据值会在接下来涉及其键区间的分层操作中被重写,由于设置MaxFileSize较小,且Compaction只会重写有效数据,因此有序文件中的绝大多数有效数据值会在一次分层操作中被全部重写,使无效数据占比达到1并被删除;004是无序文件,将其加入空间回收队列等待空间回收线程处理。
后台空间回收线程首先将队列中的无序文件按无效数据占比排序,并选择无效数据占比最高的文件,遍历文件并将有效数据重新写入新文件并向LSM-Tree更新位置索引,全部重写后删除该文件。因为无序文件中保存了整个键值对,因此可以使用键向LSM-Tree查询数据值的位置是否与本文件一致,从而判断数据是否有效。图5是无序文件的空间回收流程示意图,图中上方为空间回收队列,无序文件f是队列中无效数据占比最高的文件,正在被回收,且已遍历到键值对<key,value>,文件下标为地址偏移量。根据图示,首先读取LSM-Tree判断value的位置是否在文件f中的偏移量x处,若是,则将<key,value>追加写入新文件,并向LSM-Tree更新value位置为新文件中的偏移量,新文件大小达到8MB或空间回收执行完毕后,将其加入无序数据区。因此,空间回收写回的数据和前台写入的数据分离存储在不同的文件中,由于被写回的数据相对其他数据更少被更新,这种分离可以一定程度上避免对这些数据的再次重写,降低了未来的空间回收开销。
差异化的磁盘空间回收策略一方面保障了被调度的文件含有较多的无效数据,即可以回收较多空间,重写较少的有效数据;另一方面通过将中数据值的重写整合进Compaction过程中,避免了回收这些数据值时对LSM-Tree的频繁读写,而回收大数据值空间时读写LSM-Tree频率相对较低,开销较小,因此空间回收效率同样较高。
在本实施例中,通过基于数据值分类的差异化键值数据存储方法,在以键值分离的架构降低系统写放大的同时,实现了对键值数据的差异化分类存储,利用开销较低的分层合并和局部有序性优化操作维护了支持高效读操作所需要的数据有序性,同时通过监控文件中无效数据的占比来执行差异化的空间回收调度方法,有效降低了磁盘空间的开销。相比于其他的键值存储技术,本发明在全面地保证了高效读写性能的同时保持了较低的存储成本。
Claims (1)
1.一种基于数据值分类的差异化键值数据存储方法,其特征在于包括以下步骤:
第一步:键值数据的分类存储
采用数据值的分类方法,将键值数据按数据值大小分成大、中、小三类,并以键值分离的存储结构将数据值分别存储在磁盘上的无序数据区、有序数据区以及索引区三个不同区域:
所述无序数据区,由一系列无序文件组成,存储大数据值,数据值在文件内按写入顺序存储;
所述有序数据区,由一系列有序文件组成,存储中数据值,数据值在文件内部按照键的字典序排列,不同有序文件之间可以存在范围重叠;
所述索引区,结构为日志结构合并树,保存小键值对本身,以及大、中数据值在数据区中的位置;
所述数据值的分类方法为:以近似数据值的位置索引大小作为小键值对的最大数据值大小SmallThreshold,并根据存储介质的并发随机读取性能设置大键值对的最小数据值大小LargeThreshold,满足当数据值大于LargeThreshold时并发随机读取性能接近顺序读取;数据值文件的大小限制为MaxFileSize,其值应小于LSM-Tree中数据文件的大小;键值对在写入时遵循以下流程:
(1)判断键值数据类型,将中小键值对直接写入LSM-Tree的写缓存中,将大键值对追加写入最新无序文件,并在成功写入后将其位置索引<key,value位置>写入写缓存;每当无序文件大小达到MaxFileSize时生成下一个文件;
(2)当写缓存写满刷盘时,生成新的有序文件,按键的字典序写入中数据值,同时记录中数据值在文件中的位置<key,value位置>;每当有序文件达到MaxFileSize时生成下一个文件;
(3)将写缓存中的小键值对,和其他数据值的位置索引<key,value位置>一起写入LSM-Tree中;
第二步:有序文件的分层管理
将有序文件逻辑上分为三层,LSM-Tree最后两层的中数据值分别仅存储在第1层与第2层有序文件中,LSM-Tree其余各层的中数据值仅存储在第0层有序文件中;分层操作在LSM-Tree触发输出层为最后两层的Compaction时执行,将Compaction数据中输入层的中数据值合并排序重写到对应输出层的有序文件中;具体方法为:
(1)每当生成有序文件时记录其所在层数,从写缓存刷盘生成的有序文件为第0层;
(2)当LSM-Tree执行Compaction时,若输出层为最后两层,则对于输入数据中顺序遍历到的每个中键值对,若其数据值所在的有序文件的层数低于输出层索引的有序文件层,或该文件被标记为需要合并,则将数据值写入新生成的对应输出层的有序文件中;关于需要合并标记在第三步和第四步中说明;
(3)Compaction在保存输出数据时更新中数据值的位置;
第三步:优化底层数据值的局部有序性
每当LSM-Tree完成一次底层的Compaction后,查看本次Compaction的输出数据索引的有序文件间的范围重叠情况,若在某个键区间内相互重叠的有序文件数量超过了限定值MaxOverlap,则将这些文件加上需要合并标记,在下一次涉及该区间的Compaction中,有序文件的分层操作合并这些文件中的数据值,无论这些文件属于哪一层;
第四步:差异化的磁盘空间回收策略
对于被更新、重写或删除而无效的数据,键、小数据值和数据值位置在Compaction时删除;对于中、大数据值,通过在Compaction过程中监控无效数据值在文件中的分布情况来调度并执行空间回收;监控步骤为:
(1)内存中维护一个元数据表记录每个数据值文件即有序文件或无序文件的类型和无效数据量;
(2)在每次Compaction过程中,对于输入数据索引的每个数据值文件D,记录输入数据保存在其中的数据值大小Di和输出数据保存在其中的数据值大小Do;
(3)在Compaction结束时,将各文件D的无效数据量增加Di–Do,文件的无效数据占比为无效数据量除以总数据量;
(4)若Compaction中分层操作产生了新的有序文件,将其加入元数据表,无效数据量为0;
在Compaction结束后,对无效数据占比超过MaxInvalidRatio的数据值文件执行空间回收调度,方法为:
(1)若无效数据占比为1,将文件删除,结束调度;
(2)若该文件为有序文件,将其标记为需要合并,在接下来的分层操作中重写该文件中的有效数据值,使其无效数据占比成为1从而被删除;
(3)若该文件为无序文件,将其加入空间回收队列中等待处理;
后台空间回收线程持续从空间回收队列中取出无效数据占比最高的文件执行回收:遍历文件中存储的大键值对,使用键向LSM-Tree查询数据值位置是否与本文件一致从而判断数据是否有效,将有效数据重新写入新的无序文件并向LSM-Tree更新位置,最后删除该文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010182605.2A CN111399777B (zh) | 2020-03-16 | 2020-03-16 | 一种基于数据值分类的差异化键值数据存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010182605.2A CN111399777B (zh) | 2020-03-16 | 2020-03-16 | 一种基于数据值分类的差异化键值数据存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111399777A CN111399777A (zh) | 2020-07-10 |
CN111399777B true CN111399777B (zh) | 2023-05-16 |
Family
ID=71430941
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010182605.2A Active CN111399777B (zh) | 2020-03-16 | 2020-03-16 | 一种基于数据值分类的差异化键值数据存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111399777B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112131140B (zh) * | 2020-09-24 | 2023-07-14 | 北京计算机技术及应用研究所 | 基于ssd的支持高效存储空间管理的键值分离存储方法 |
CN112364278A (zh) * | 2020-11-23 | 2021-02-12 | 浪潮云信息技术股份公司 | 一种基于CockroachDB底层键值数据分类优化方法 |
CN112540731B (zh) * | 2020-12-22 | 2023-08-11 | 北京百度网讯科技有限公司 | 数据的追加写方法、装置、设备、介质和程序产品 |
CN112699092B (zh) * | 2021-01-13 | 2023-02-03 | 浪潮云信息技术股份公司 | 一种RocksDB存储大值数据的方法 |
CN112817530B (zh) * | 2021-01-22 | 2024-06-07 | 万得信息技术股份有限公司 | 一种多线程安全高效读写有序数据的方法 |
CN113094372A (zh) | 2021-04-16 | 2021-07-09 | 三星(中国)半导体有限公司 | 数据存取方法、数据存取控制装置及数据存取系统 |
CN113282854A (zh) * | 2021-06-01 | 2021-08-20 | 平安国际智慧城市科技股份有限公司 | 数据请求响应方法、装置、电子设备及存储介质 |
US12033003B2 (en) | 2021-07-27 | 2024-07-09 | International Business Machines Corporation | Dynamic workload distribution for data processing |
US11513704B1 (en) | 2021-08-16 | 2022-11-29 | International Business Machines Corporation | Selectively evicting data from internal memory during record processing |
US11675513B2 (en) | 2021-08-16 | 2023-06-13 | International Business Machines Corporation | Selectively shearing data when manipulating data during record processing |
CN114115734B (zh) * | 2021-11-18 | 2024-10-25 | 新华三大数据技术有限公司 | 一种数据重删方法、装置、设备及存储介质 |
CN114398007B (zh) * | 2021-12-27 | 2023-09-12 | 南京邮电大学 | 一种基于LSM-tree的KV存储系统读性能的缓存优化方法 |
CN114020707B (zh) * | 2022-01-06 | 2022-06-14 | 阿里云计算有限公司 | 存储空间回收方法、存储介质及程序产品 |
CN114896250B (zh) * | 2022-05-19 | 2023-02-03 | 中国地质大学(北京) | 一种键值分离的键值存储引擎索引优化方法及装置 |
CN115168505A (zh) * | 2022-06-21 | 2022-10-11 | 中国人民解放军国防科技大学 | 一种用于海洋时空数据的管理系统以及方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102214215A (zh) * | 2011-06-07 | 2011-10-12 | 陆嘉恒 | 一种基于文本信息的快速反近邻查询方法 |
CN106708427A (zh) * | 2016-11-17 | 2017-05-24 | 华中科技大学 | 一种适用于键值对数据的存储方法 |
CN110083601A (zh) * | 2019-04-04 | 2019-08-02 | 中国科学院计算技术研究所 | 面向键值存储系统的索引树构建方法及系统 |
CN110188108A (zh) * | 2019-06-10 | 2019-08-30 | 北京平凯星辰科技发展有限公司 | 数据存储方法、装置、系统、计算机设备及存储介质 |
CN110347336A (zh) * | 2019-06-10 | 2019-10-18 | 华中科技大学 | 一种基于nvm与ssd混合存储结构的键值存储系统 |
CN110389942A (zh) * | 2019-06-21 | 2019-10-29 | 华中科技大学 | 一种无垃圾回收的键值分离存储方法和系统 |
CN110602517A (zh) * | 2019-09-17 | 2019-12-20 | 腾讯科技(深圳)有限公司 | 基于虚拟环境的直播方法、装置和系统 |
CN110825748A (zh) * | 2019-11-05 | 2020-02-21 | 北京平凯星辰科技发展有限公司 | 利用差异化索引机制的高性能和易扩展的键值存储方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160063021A1 (en) * | 2014-08-28 | 2016-03-03 | Futurewei Technologies, Inc. | Metadata Index Search in a File System |
US10891264B2 (en) * | 2015-04-30 | 2021-01-12 | Vmware, Inc. | Distributed, scalable key-value store |
US10725988B2 (en) * | 2017-02-09 | 2020-07-28 | Micron Technology, Inc. | KVS tree |
US20180349095A1 (en) * | 2017-06-06 | 2018-12-06 | ScaleFlux, Inc. | Log-structured merge tree based data storage architecture |
US10783186B2 (en) * | 2017-08-31 | 2020-09-22 | Micron Technology, Inc. | Heterogenous key-value sets in tree database |
US10649959B2 (en) * | 2017-09-27 | 2020-05-12 | Vmware, Inc. | Write-optimized nested trees |
US20190034427A1 (en) * | 2017-12-28 | 2019-01-31 | Intel Corporation | Data management system employing a hash-based and tree-based key-value data structure |
-
2020
- 2020-03-16 CN CN202010182605.2A patent/CN111399777B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102214215A (zh) * | 2011-06-07 | 2011-10-12 | 陆嘉恒 | 一种基于文本信息的快速反近邻查询方法 |
CN106708427A (zh) * | 2016-11-17 | 2017-05-24 | 华中科技大学 | 一种适用于键值对数据的存储方法 |
CN110083601A (zh) * | 2019-04-04 | 2019-08-02 | 中国科学院计算技术研究所 | 面向键值存储系统的索引树构建方法及系统 |
CN110188108A (zh) * | 2019-06-10 | 2019-08-30 | 北京平凯星辰科技发展有限公司 | 数据存储方法、装置、系统、计算机设备及存储介质 |
CN110347336A (zh) * | 2019-06-10 | 2019-10-18 | 华中科技大学 | 一种基于nvm与ssd混合存储结构的键值存储系统 |
CN110389942A (zh) * | 2019-06-21 | 2019-10-29 | 华中科技大学 | 一种无垃圾回收的键值分离存储方法和系统 |
CN110602517A (zh) * | 2019-09-17 | 2019-12-20 | 腾讯科技(深圳)有限公司 | 基于虚拟环境的直播方法、装置和系统 |
CN110825748A (zh) * | 2019-11-05 | 2020-02-21 | 北京平凯星辰科技发展有限公司 | 利用差异化索引机制的高性能和易扩展的键值存储方法 |
Non-Patent Citations (5)
Title |
---|
"ForestDB_A_Fast_Key-Value_Storage_System_for_Variable-Length_String_Keys";Jung-Sang Ahn;《IEEE TRANSACTIONS ON COMPUTERS》;第65卷(第3期);全文 * |
"LSM-Tree Managed Storage for Large-Scale";Fei Mei;《IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS》;第30卷(第2期);全文 * |
"无垃圾回收的键值分离存储系统优化设计与实现";林立亚;《中国优秀硕士学位论文全文数据库 信息科技辑》;全文 * |
"面向键值数据库应用的混合存储系统设计与实现";赵恒;《中国优秀硕士学位论文全文数据库 信息科技辑》;全文 * |
基于LSM-tree的KV数据库性能优化;张伟韬;《中国优秀博士学位论文全文数据库 信息科技辑》;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111399777A (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111399777B (zh) | 一种基于数据值分类的差异化键值数据存储方法 | |
CN102364474B (zh) | 用于机群文件系统的元数据存储系统和管理方法 | |
KR102564170B1 (ko) | 데이터 객체 저장 방법, 장치, 및 이를 이용한 컴퓨터 프로그램이 저장되는 컴퓨터 판독가능한 저장 매체 | |
CN102541757B (zh) | 写缓存方法、缓存同步方法和装置 | |
US20090063548A1 (en) | Log-structured store for streaming data | |
CN112131140B (zh) | 基于ssd的支持高效存储空间管理的键值分离存储方法 | |
CN105912687A (zh) | 海量分布式数据库存储单元 | |
CN105159915A (zh) | 可动态适应的lsm树合并方法及系统 | |
KR101356470B1 (ko) | 플래시 파일 시스템 | |
KR20150122533A (ko) | 세컨더리 인덱스 생성 방법 및 세컨더리 인덱스 저장 장치 | |
CN105955664B (zh) | 一种基于段结构的瓦记录转换层的读写方法 | |
CN114996275B (zh) | 一种基于多树转换机制的键值存储方法 | |
CN108089821A (zh) | 一种微控制器数据存储管理的方法 | |
CN116257523A (zh) | 一种基于非易失存储器的列式存储索引方法及装置 | |
CN111475508A (zh) | 一种优化叶子节点合并操作的高效索引方法 | |
KR101438667B1 (ko) | 비휘발성 램 기반의 b+ 트리 데이터베이스화 방법 | |
CN114416646A (zh) | 一种层级存储系统的数据处理方法及装置 | |
CN114691041B (zh) | 键值存储系统、垃圾回收方法 | |
CN113253926A (zh) | 提升新型存储器的查询和存储性能的存储内索引构建方法 | |
Carniel et al. | A generic and efficient framework for flash-aware spatial indexing | |
CN116204130A (zh) | 一种键值存储系统和键值存储系统的管理方法 | |
CN103823634B (zh) | 一种支持无随机写模式的数据处理方法及系统 | |
CN114969069A (zh) | 一种应用于键值存储系统的热度感知本地更新方法 | |
US20180011897A1 (en) | Data processing method having structure of cache index specified to transaction in mobile environment dbms | |
Lee et al. | An efficient index buffer management scheme for implementing a B-tree on NAND flash memory |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20210115 Address after: Room 207, 2nd floor, C-1 building, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing 100080 Applicant after: Pingkai star (Beijing) Technology Co.,Ltd. Address before: 100080 2nd floor, C-1 building, Dongsheng Science Park, 66 xixiaokou Road, Haidian District, Beijing Applicant before: Beijing Pingkai Star Technology Development Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |