CN113297136B - 一种面向lsm树的键值存储方法和存储*** - Google Patents

一种面向lsm树的键值存储方法和存储*** Download PDF

Info

Publication number
CN113297136B
CN113297136B CN202110573140.8A CN202110573140A CN113297136B CN 113297136 B CN113297136 B CN 113297136B CN 202110573140 A CN202110573140 A CN 202110573140A CN 113297136 B CN113297136 B CN 113297136B
Authority
CN
China
Prior art keywords
data
layer
task
file
key
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
CN202110573140.8A
Other languages
English (en)
Other versions
CN113297136A (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.)
Nanjing University
Original Assignee
Nanjing University
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 Nanjing University filed Critical Nanjing University
Priority to CN202110573140.8A priority Critical patent/CN113297136B/zh
Priority to PCT/CN2021/103902 priority patent/WO2022246953A1/zh
Publication of CN113297136A publication Critical patent/CN113297136A/zh
Application granted granted Critical
Publication of CN113297136B publication Critical patent/CN113297136B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

本发明提供了一种面向LSM树的键值存储方法和存储***。所述方法包括:将磁盘层次进行细粒度划分,设置compaction策略为:在compaction任务中,所有上层子层次均参与任务,而下层仅有一个子层次参与任务,以降低下层参与数据与总参与数据的占比;在执行compaction任务时对compaction任务进行划分,使得参与compaction任务的文件数量减少,提高compaction的并行度。本发明还通过并行读取算法减少对读性能的影响,并通过对LSM树的写放大进行建模,提供了选取使写放大最小化的参数的方法。

Description

一种面向LSM树的键值存储方法和存储***
技术领域
本发明涉及计算机存储技术,具体涉及一种面向LSM树的键值存储方法和存储***。
背景技术
键值存储(Key-Value Store)将数据存储为<键-值>集合,其中键作为值的唯一标识符。它不支持像关系型数据库那样复杂的关系模式,而是通过简单的Put(k,v)、Get(k)、Update(k,v)、Delete(k)等接口处理数据。由于其高性能、高可扩展性等优势,在如今的网络应用和分布式***中扮演着重要的角色,被广泛应用于图形数据库、任务队列、流处理引擎、应用程序数据缓存、事件跟踪***等领域。
LSM树(Log-Structured Merge tree)是一种被广泛应用于键值存储***的存储引擎。它在内存维护一块缓存,当用户写入一条键值对,数据写入缓存,并在缓存中排序,这时写操作就执行完毕了。当缓存超过提前设定的大小,就将缓存中的数据一次性写入磁盘。这实际上是将大量的随机写转换为少量的顺序写。由于硬盘的顺序写性能远高于随机写性能,LSM树的写速度很高,因此适合于写操作较多的工作负载。为了避免***崩溃时内存数据丢失,在数据写入缓存前,需要先写入一个位于磁盘的WAL(Write Ahead Log)中。而由于这个操作是以追加写的方式进行的,并不会对***写性能造成明显影响。
磁盘中的数据存储到多个层次中(L1,L2,…,Ln),其中Ln表示最底层,Li表示第i(1≤i≤n)层。每层的数据根据键值对中的键有序保存,被分散存储到多个SSTable(SortedString Table)中,每个SSTable有序存储一定键范围的数据。相邻两层中,下一层所能容纳的数据量与上一层所能容纳的数据量的比值称为增长因子T,一般取10。以第一层最多能存储10MB数据为例,第二层最多可以存储100MB数据,以次类推,仅需要7层,总共就能容纳超过10TB数据。由内存导入的数据被写入第一层,而为了维持层次的稳定性,防止某一层数据过多,后台有一个compaction进程,不断对磁盘中的数据进行重新组织,将某一层的部分数据写入下一层。
具体来说,当某一层的数据量超过其所能容纳的最大值后,compaction进程选取该层的一个SSTable文件,然后选取该层的下一层中,所有与之有键范围重叠的SSTable文件,将这些文件进行归并排序,生成新的文件并写入下一层,而旧的选中文件被删除。
以L1的一次compaction为例,假设在本层选中的SSTable文件所包含的键值对中,键的范围为[2,8],那么在L2中,如果一个SSTable文件所包含的键的范围与[2,8]有重叠,该文件需要被选取作为compaction任务的输入。这样做是为了保证将数据写入L2后,仍能保证L2数据的有序性。而由于不同层次所能容纳的数据是指数增长的,为了将某一层的一个SSTable文件写入下一层,往往需要下一层的多个文件参与,而该层的一次compaction会使下层存储的数据增多,可能导致下一层发生compaction。这样多层积累下来,会使得磁盘中的数据被频繁重写。实际的磁盘写入数据量与用户请求的写入数据量的比值被称为写放大。以采用LSM树结构的键值存储***LevelDB为例,实验结果表明,当用户请求写入50GB数据,写放大接近20,也就是说,实际的磁盘写入量将近1TB。过高的写放大,严重影响了LSM树的写性能。而LSM树经常运行在采用SSD的计算机中,频繁的硬盘读写,会降低SSD的寿命。综上,对于LSM树结构,写放大是一个很严重的问题。另一方面,当内存buffer以及磁盘L1数据量均超过阈值时,内存数据无法刷盘,必须等待L1完成一次compaction为本层腾出一定空间之后才能服务新的写请求,导致写停顿,也就是阶段性的写延迟大幅增加。
发明内容
针对背景技术中的问题,本发明的一个目的是提出一种面向LSM树的键值存储方法,通过减少在compaction任务中下层与上层参与数据量的比值来降低写放大,并采用建模方式刻画***的写放大,优化***参数,同时采用并行读取算法减少对读性能的影响。
本发明的另一目的在于提供一种采用上述键值存储方法的键值存储***和设备。
为了实现上述目的,本发明采用如下的技术方案:
根据本发明的第一方面,提供一种面向LSM树的键值存储方法,包括以下步骤:
将LSM树的一个层次划分为多个子层次,第i层的第j个子层次标记为Li.j,子层次中的SSTable文件按照键的范围从左到右递增排列;
每层维护一个compaction指针,用于选择compaction任务的第一个输入文件;
当第i层Li的总数据量超过额定大小时,在该层触发一次compaction,将Li层的部分数据写入Li+1层,实现对磁盘数据的重新组织,其中在执行compaction任务时,Li层的所有子层次均参与任务,而Li+1层仅有一个子层次参与任务。
其中,对于Li层的一次compaction任务,其步骤包括:
依据Li层的compaction指针,在Li的第一个子层次Li.1选取所包含的最小键大于等于该指针且最接近该指针的SSTable文件作为任务初始输入文件,加入compaction任务的输入文件集,将该文件的最小键作为任务左边界,将该文件的最大键作为任务右边界;
对于Li层的其他子层次Li.2依次选取部分或全部在左右边界之内的文件并加入输入文件集,其中Si表示Li层中划分的子层次数目;
依据输入文件集中文件的最小键和最大键扩展当前任务边界,以使任务包含更多完全位于边界内的文件;
在Li+1层中选择当前数据量最少的子层次Li+1,j,依据任务边界从Li+1,j中选择位于边界内或与边界有重叠的文件加入候选文件集,通过候选文件集中的文件对compaction任务进行分割,仅将任务分割后仍需参与任务的文件加入输入文件集;
对于输入文件集,将位于Li层且在任务边界内的数据及位于Li+1层的数据进行多路归并排序,生成新文件并写入Li+1,j
对于输入文件集,将位于Li层且在任务边界外的数据进行多路归并排序,将生成的新文件中小于任务左边界的数据写入Li层,新文件中大于任务右边界的数据写入Li层的compaction缓存,并在日志中记录缓存文件的最小键、最大键,以及输入文件集中与该缓存文件有重叠的文件,将输入文件集中未被记录到日志中的文件删除;
将Li层的compaction指针替换为本次compaction任务的右边界。
其中,对任务进行分割的具体方法如下:
对于候选文件集中的每个文件,通过在内存中的元数据获取其所包含的最小键kmin和最大键kmax
根据kmin与kmax对输入文件集中的文件进行查询,如果对于输入文件集中的每个文件,[kmin,kmax]与该文件不重叠,或者在该文件中小于kmin的最大键和大于kmax的最小键之间不存在其他键值对,则将该候选文件移出候选文件集,并根据kmin和kmax将输入文件集中的文件切割为两部分,一部分所包含的键小于kmin,另一部分所包含的键大于kmax,否则,将该候选文件移出候选文件集并加入输入文件集。
在本发明第一方面的一些实施例中,所述Li层在LD+2~Ln层之间,其中n为LSM树的层次数目,D为设定的层次分界线参数,1≤D≤n;所述方法还包括:
对于L1~LD,采取tiered compaction算法,一次性将本层的全部数据进行排序,将新生成的文件写入下一层,在下一层形成一个新的子层次,在此期间,没有下层数据参与排序;
对于LD+1,将本层全部数据与下层的一个子层次的数据进行排序,将新生成的数据写入下层选中的子层次中。
在此分层方式下,写入操作包括:
获取用于键值对而维护的一个全局版本号,递增,并编码到键中;
将数据以追加写的方式写入WAL;
将数据写入内存buffer,返回;
查找操作包括:
查询内存buffer和缓存,如果存在,返回数据,否则进行下一步;
从L1到Ln层,对磁盘中的每个层次Lb依次查找,其中1≤b≤n,维护一个线程池,线程池中线程的数量为max(S1,S2,…,Sn),对于Lb,向线程池提交Sb个读取任务,线程threadj对Lb,j进行二分查找,1<j<Sb
汇总Sv个线程的读取结果,如果有任意个线程读取到数据,选择版本号最大的数据返回,读取结束,如果没有线程读取到数据,继续读取Lb+1
若所有层次都读取完毕,仍未读取到数据,返回数据不存在。
范围查询操作包括:
利用Seek(k)接口寻找大于等于k的最小键所对应的键值对:向线程池提交多个查询任务,每个线程负责查询一个子层次或内存buffer,每个线程通过二分法查找大于等于k的最小键,如果每个线程都没有读到数据,返回数据不存在;否则,对于读取到数据的线程,从读到的数据开始构造迭代器,并将读取到的数据根据版本号排序,取出版本最新的数据返回;
利用Next()接口找到***中大于当前找到的键的最小键所对应的键值对:如果Seek(k)找到了数据,当用户提交一个Next()请求,上次返回结果的迭代器运行一次Next(),再次将每个迭代器当前指向的数据进行比较,返回最新数据,在此期间,旧版本的数据被忽略。
在本发明第一方面的一些实施例中,所述方法还包括:对写放大进行建模,通过最小化写放大来选取最优的参数,其步骤包括:
令LSM树的层数为n,每层的子层次数目为Sb,每层的增长因子为Tb,1≤b≤n,采用不同compaction算法的层次的分界线为D,计算每个层次的写放大:
对于写WAL,其写放大为1;
对于内存buffer刷盘,其写放大为buf/Unique-1(buf),其中buf为buffer所能容纳的最大键值对数目,Unique-1(k)为Unique(p)的反函数,Unique(p)=∑k∈K(1-(1-fX(k))p),N为工作负载中独立的键的总数,K为键空间[0,N-1]中的整数集合,fX(k)表示在一次写请求中键k出现的概率;
当1≤b≤D时,对于Lb,其写放大为 其中Intervalb=Intervalb-1*Sb,Interval0=Unique-1(buf),Size1=buf*S1,/> Sizeb+1=Size(b+1).j*Sb+1
对于LD+1,其写放大为 其中IntervalD+1=IntervalD*SD+1,SizeD+2=SizeD+1*TD+2,Size(D+2).j=SizeD+2/SD+2
当D+2≤b<n时,对于Lb,其写放大为其中Intervalb=Intervalb-1+DIntervalb,DIntervalb通过解方程/> 得到,Sizeb+1=Sizeb*Tb+1,Size(b+1).j=Sizeb+1/Sb+1;
每个磁盘层次的写放大,与写WAL的写放大、内存buffer刷盘的写放大一起,构成整个LSM树的写放大;
固定LSM树总子层次个数,迭代求解不同参数下的写放大,获取使写放大最小的Sb、Tb以及D。
根据本发明的第二方面,提供一种面向LSM树的键值存储***,包括:
第一存储部,其存储包含n个层次的LSM树的前D个层次,并采取使写放大最小化的tiered compaction算法执行compaction任务,其中D表示设定的层次分界线参数;
第二存储部,其存储所述LSM树的第D+1层,并采取包含如下步骤的compaction方法执行compaction任务:
选取该层所有子层次的所有文件加入输入文件集;
在LD+2层中选择当前数据量最少的子层次LD+2,j,依据LD+1数据所包含的范围从LD+2,j中选择所有重叠文件加入输入文件集;
将输入文件集中的数据进行多路归并排序,将新生成的文件放入下层选中的子层次中;
第三存储部,其存储所述LSM树的LD+2~Ln层,并采取包括如下步骤的compaction方法执行compaction任务:
将LSM树的一个层次Li划分为多个子层次,第i层的第j个子层次标记为Li.j,子层次中的SSTable文件按照键的范围从左到右递增排列;
每层维护一个compaction指针,用于选择compaction任务的第一个输入文件;
当第i层Li的总数据量超过额定大小时,在该层触发一次compaction,将Li层的部分数据写入Li+1层,实现对磁盘数据的重新组织,其中在执行compaction任务时,Li层的所有子层次均参与任务,而Li+1层仅有一个子层次参与任务。
其中第三存储部对于一次compaction任务所执行的步骤和本发明第一方面所述的面向LSM树的键值存储方法中对于Li层的一次compaction任务所包括的步骤相同。
根据本发明的第三方面,提供一种键值对存储设备,所述设备包括:
一个或多个处理器;
存储器;以及
一个或多个计算机程序,所述一个或多个计算机程序存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,当所述一个或多个计算机程序被所述一个或多个处理器执行时,致使所述一个或多个处理器执行包括如本发明第一方面所述的面向LSM树的键值存储方法的步骤。
本发明能够取得以下有益效果:
1、将LSM树的每个层次细粒度划分,在compaction时,上层有多个子层次参与,由于每个子层次包含的数据范围相同,每个子层次选中的数据量相近。而下层只有一个子层次参与。而且在下层选取数据时,通过将compaction任务切分,尽量减少下层参与compaction的文件数量,从而降低了下层参与compaction的数据量与上层参与compaction的数据量的比值,也就是说,为了将一定数量的数据导入下一层,下层需要参与排序的数据量减少,从而减少了写放大。
2、通过对不同的层次采取不同的compaction算法,在较上层,采取可以使写放大最小化的tiered compaction算法,加快将数据导入下层的效率,减少写停顿现象的发生。
3、通过多线程并行读取,减少了对读性能的影响。并通过对写放大进行建模,给出了选取最优参数的方法,在固定读性能的情况下,最大化***写性能。
附图说明
图1是根据本发明实施例的LSM树示意图;
图2是根据本发明实施例的compaction算法示意图;
图3是根据本发明实施例的compaction任务分割示意图;
图4是根据本发明实施例的并行读取算法示意图。
具体实施方式
下面结合附图和实施例对本发明的技术方案作进一步说明。
图1是根据本发明实施例的LSM树示意图。如图所示,内存中有一个buffer,接收用户的写请求,WAL是为了避免程序崩溃时buffer数据丢失而设置的磁盘预写式日志。磁盘中的数据分为三个层次(L1,L2,L3)。每层又分为三个子层次。每个子层次中包含多个SSTable文件。子层次中的数据是有序的,而不同的子层次之间的数据并无关系。这相当于放松了原始LSM树的排序性,原始LSM树的每一个层次内的数据是严格有序的,而本发明的LSM树的每个层次的数据通过切分的方式,分为了多个较小的有序分组。
图2是根据本发明实施例的compaction算法的一次运行过程示意图。图中的每个方块代表一个SSTable文件。为方便描述,假设一个文件最多可以容纳两条键值对(实际中每个文件所能纳的键值对数目远高于2),方块中的数字表示该文件所包含的键值对中的键,而其对应的值未显示。数字右上角的标记表示该键对应的值的版本新旧关系,以键5为例,5″所对应的值要比5′所对应的值新,而5′所对应的值要比5所对应的值新。具体实现时,可以通过维护一个全局版本号(例如,一个64位整数)来记录键值对的写入顺序。用一个数字代表当前最新版本号,每写入一个新的键值对,将当前版本号编码到键值对中,并将全局版本号+1。例如,当前***版本号是1,***一个键值对,把1赋给这个键值对,存储为<key1,1,value1>。然后***版本号变为2。接着,再***一个键值对,把2赋给这个键值对,存储为<key2,2,value2>。然后***版本号变为3。这样,当读取多个键值对时,通过判断键值对的版本号,可以知道数据的新旧关系。
当L2的数据量超过其所能容纳的最大值,一次compaction任务被触发。首先从L2.1选取输入文件。由于本层的compaction指针为6,选取所包含的最小键大于等于6且最接近6的文件,也就是SSTable(6′,12′)作为初始文件并加入输入文件集。记录该文件所包含的最小键6为该compaction任务的左边界,该文件所包含的最大键12为该compaction任务的右边界。然后,从L2.2到L2.3,根据左右边界从每个子层次选取在这个边界内,或与该边界有重叠的文件加入输入文件集,这里总共选取了SSTable(5″,8),SSTable(12,13′),SSTable(5′,7′),SSTable(10′,14″)4个文件。至此,L2文件选取完毕。
对于L3,为了简化显示,图中没有列出L3.1和L3.3的文件所包含的键。由于L3.2包含的数据量最少,选择该子层次参与compaction。同样根据左右边界,在该子层次选取文件SSTable(5,6),SSTable(7,9),SSTavle(10,11)加入输入文件集。选取数据量最少的子层次参与compaction,可以使得在compaction任务结束后,每个子层次的数据量最接近,但使得每个子层次的数据新旧关系无法保证。而为了保持层次间的数据版本关系(对于同一个键,上层的值比下层新),需要将L2某一范围内的全部数据写入下一层。因此,需要根据compaction的边界,将L2中选中文件进行切割,边界范围外的数据需要重新写回本层。否则可能导致L3中的数据比L2新。
边界外的数据最终要写回本层,这会增加写放大,因此根据在每个子层次中选中文件的最小键和最大键对边界进行扩展。如果扩展后,可以减少切割的文件数量,则在不引入新文件的前提下更新边界。也就是说,边界仅根据初始文件进行扩展,保证不增加额外文件。否则可能出现将边界不断扩展,最终所有文件都加入输入文件的情况,这使得compaction任务体积过大,影响***稳定性。如图所示,一开始的边界为[6,12],而扩展后的边界为[5,12],这样不必对SSTable(5″,8),SSTable(5′,7′)两个文件进行切割。
当文件选取完毕后,将这些文件分为两个部分:1,从L2选中的文件中处于边界内的部分和从L3选中的所有文件;2,从L2选中的文件中处于边界外的部分。对第一部分的数据,采用多路归并排序,生成4个新文件SSTable(5″,6′),SSTable(7′,8),SSTable(9,10′),SSTable(11,12)并放入L3.2。而对第二部分的数据进行层内compaction,即采取多路归并排序,生成新文件SSTable(13′,14″)并放回L2.3。最后,将compaction指针替换成任务的右边界12,删除输入文件集中的文件。
为了进一步减少文件写回L2造成的写放大,为每一层设置一块compaction缓存,存储层内compaction生成的文件。具体来说,层内compaction在L2可能生成两部分文件,第一部分文件位于左边界之左,第二部分文件位于右边界之右。第一部分文件写入磁盘,第二部分文件将存入compaction缓存而不写入磁盘。Compaction任务的输入文件采用循环选取策略,也就是说,当本层进行下次compaction时,本次compaction任务的右边界将作为下次compaction任务的左边界。这样,缓存文件可以直接从内存读取,减少了一次磁盘文件读写。由于经过了边界扩展操作,而且compaction任务有着明确的边界,在不考虑L1的compaction时,不会生成位于左边界之左的文件,因此缓存文件占用的内存空间很少。缓存只会被使用一次,如果L1触发的compaction任务包含了缓存中的文件,该文件被移出缓存,此时缓存仍然减少了一次磁盘文件读写。
当计算机崩溃,可能导致compaction缓存的丢失。为了避免数据丢失,在磁盘日志中,将compaction缓存文件所属的子层次,该缓存文件的最小键、最大键、该缓存文件的来源SSTable文件同compaction的其他元数据(如compaction生成的新文件、compaction指针以及compaction任务统计信息等)一同记录,在任务的最后一步,不删除与缓存有关的输入文件。这样,当计算机崩溃后,可以利用这些数据,由输入文件恢复出compaction缓存中的数据。
图3显示了如何通过将compaction任务分割,减少下层参与任务的数据量。图中展示的是L2的一次compaction任务。当结束L2文件的选取后,首先根据compaction边界,在L3.1中选取SSTable(1,2),SSTable(3,6),SSTable(7,10)作为候选文件。然后,对于这三个候选文件,分别根据文件的最小键和最大键,对当前输入文件集中的每个子层次的文件进行查询,判断该候选文件是否可以不参与本次compaction。如果对于输入文件集中的每个文件fi,符合下面两个条件之一,那么该候选文件不加入本次任务:1,该候选文件的最小键和最大键位于fi的范围之外;2,该候选文件的最小键和最大键位于fi的范围之内,但可以通过将fi分割为两部分,使得这两部分与候选文件均不重叠。
图中,对于候选文件SSTable(3,6),其所确定的键范围[3,6]与输入文件集中的文件SSTable(7″,9)所确定的键范围[7,9]以及SSTable(1′,2″)所确定的键范围[1,2]无重叠。而当前候选文件虽然与文件SSTable(2′,7′)所确定的键范围[2,7]有重叠,但如果将SSTable(2′,7′)分割为SSTable(2′)和SSTable(7′),这两个文件与[3,6]均无范围重叠。于是,候选文件SSTable(3,6)不参与本次compaction。本次compaction划分为两个子任务,一个任务负责将[1,2]范围内的数据进行排序,另一任务负责将[7,10]范围内的数据进行排序,这两个子任务可以并行执行。这样,一方面减少了L3中参与任务的文件数量,减少了写放大,另一方面增加了compaction的并行性,提高了compaction的速度。
图4显示了本发明中LSM树的读取算法。由于将每个层次进一步划分,增加了要读取的子层次数,使得读性能受到影响。为了提升读性能,本发明采取并行读取算法。本发明维护一个线程池,线程池中的线程个数与该LSM树的最大子层次数目相同。当一个读请求到达,如果没有在内存中找到对应的数据,需要对磁盘数据进行查询。首先查询L1,线程threadj负责查询L1.j。当每个子层次查询完毕,汇总每个线程的结果。如果有任意线程查到结果,则通过版本号比较对应的数据,得到最新的结果并返回。如果所有的线程都没有查询到结果,那么开始对L2进行查询。以此类推,直到查询到相应的结果并返回,或者对每个层次都进行了查找但仍未找到对应的数据,此时返回数据不存在。
由于每个层次的子层次数目Si,每个层次的增长因子Ti和采取tiered compaction算法的层次与图2描述的细粒度compaction算法的层次的分界线D的设置对***性能有很大影响。因此可以通过建立模型刻画***在不同参数下的写放大。通过最小化写放大,获取使***写性能最优的参数。
假设工作负载的键空间K的范围为[0,N-1],其中N为工作负载中独立的键的总数。设键服从某种分布X,如均匀分布,齐夫分布等。键k在一次写请求中出现的概率为fX(k)。例如,当键服从均匀分布,fX(k)=1/N,当键服从齐夫分布, 其中s体现了数据倾斜程度,h将每个键映射为键空间K的一个整数。对于p次请求,出现的独立键的数目为Unique(p)=∑k∈K(1-(1-fX(k))p)。Unique(p)的反函数为Unique-1(k)。由于Unique(p)为单调函数,通过将其定义域扩展到实数域,可以求解Unique-1(k)。设一个文件的大小为u,则将k个文件u1,u2,…,uk进行compaction后生成的新文件的总大小为
通过刻画每一层的写放大对写开销进行建模。数据写入内存buffer前要写WAL,因此写放大为WAbuf=1。
设***buffer所能容纳的键值对的数目为buf。将内存中的buffer视为L0,即Size0=buf。当buffer达到容量阈值,将buffer中的数据批量写入L1。由于buffer中不包括重复的键值对,因此buffer从空到满需要的写请求次数为Unique-1(buf),这也是将该层数据全部写入下一层的间隔Interval0。而写入磁盘的数据量是buf,因此,内存写磁盘的写放大为WA0→1=buf/Unique-1(buf)。L1的一个子层次L1.j的大小为Size1.j=buf,L1的总大小为Size1=buf*S1
对于磁盘compaction造成的写放大,依据一定间隔内,向下层写入的数据量来计算。
对于Li(1≤i≤D),采用tiered compaction算法,当本层的子层次数目达到Si时触发compaction。本层每增加一个子层次,所需要的时间为Li-1发生两次compaction的间隔。因此,本层发生compaction的间隔为Intervali=Intervali-1*Si。在该间隔内,向Li+1写入的数据量为因此,Li的写放大为WAi→i+1=Writei+1/Intervali。而Li+1的一个子层次的大小Size(i+1).j=Writei+1,Li+1的总大小Sizei+1=Size(i+1).j*Si+1
对于LD+1,当本层的子层次数目达到SD+1时触发compaction。本层每增加一个子层次,所需要的间隔为LD发生两次compaction的间隔。因此,本层发生compaction的间隔为IntervalD+1=IntervalD*SD+1。在该间隔内,向LD+2写入的数据量为 其中,SizeD+2=SizeD+1*TD+2,第j个子层次的大小Size(D+2).j=SizeD+2/SD+2。因此,LD+1的写放大为WAD+1→D+2=WriteD+2/IntervalD+1
对于Li(D+2≤i<n),因为每个子层次所包含的数据范围相同,每次compaction任务在Li的每个子层次选取的数据范围大体相同,所以可以通过该层的第一个子层次Li.1进行分析。令DIntervali为在Li.1中两次compact同一个键的间隔,d为Li.1的一个键与刚刚compact到下一层的键LastKey的单向距离,其中0≤d≤N-1。对于一个固定的d,如果该层有一个键k1与LastKey的距离为d,自从该键被compact后,该子层次已经有了DIntervali*d/(N*Si)个新请求。如果这些新请求中存在键k1,那么Li.1中存在键k1。这个概率是假设对任意k∈K,P(LastKey=k)=1/N,考虑所有的k,可得在Li.1中,存在与LastKey的距离为d的键的概率/> 考虑所有的d,可得/>由此求出本层的DIntervali。本层的间隔Intervali=Intervali-1+DIntervali,而在此间隔内,写入下层的数据量其中Sizei+1=Sizei*Ti+1,第j个子层次的大小Size(i+1).j=Sizei+1/Si+1。因此,本层的写放大为WAi→i+1=Writei+1/Intervali
将所有的WA相加,得到LSM树的总WA。读性能受LSM树子层次总个数的影响,一般来说,子层次数目越多,读操作的IO越多。将LSM树总的子层次数目固定,即为定值,通过迭代获取不同参数下的总WA,记录WA最小时的Si,Ti以及D。
根据本发明实施例的参数优化算法如下:
根据本发明的另一实施例,提供一种面向LSM树的键值存储***,包括:
第一存储部,其存储包含n个层次的LSM树的前D个层次,并采取使写放大最小化的tiered compaction算法执行compaction任务,其中D表示设定的层次分界线参数;
第二存储部,其存储所述LSM树的第D+1层,并采取包含如下步骤的compaction方法执行compaction任务:
选取该层所有子层次的所有文件加入输入文件集;
在LD+2层中选择当前数据量最少的子层次LD+2,j,依据LD+1数据所包含的范围从LD+2,j中选择所有重叠文件加入输入文件集;
将输入文件集中的数据进行多路归并排序,将新生成的文件放入下层选中的子层次中;
第三存储部,其存储所述LSM树的LD+2~Ln层,并采取包括如下步骤的compaction方法执行compaction任务:
将LSM树的一个层次Li划分为多个子层次,第i层的第j个子层次标记为Li.j,子层次中的SSTable文件按照键的范围从左到右递增排列;
每层维护一个compaction指针,用于选择compaction任务的第一个输入文件;
当第i层Li的总数据量超过额定大小时,在该层触发一次compaction,将Li层的部分数据写入Li+1层,实现对磁盘数据的重新组织,其中在执行compaction任务时,Li层的所有子层次均参与任务,而Li+1层仅有一个子层次参与任务。
其中第三存储部对于一次compaction任务所执行的步骤和前述方法实施例中对于Li层的一次compaction任务所包括的步骤相同。此处不再赘述。
该键值对存储***维护一个全局版本号(例如,一个64位整数),每写入一个新的键值对,将当前版本号编码到键值对中,并将全局版本号+1。例如,当前***版本号是1,***一个键值对,把1赋给这个键值对,存储为<key1,1,value1>。然后***版本号变为2。接着,再***一个键值对,把2赋给这个键值对,存储为<key2,2,value2>。然后***版本号变为3。这样,当读取多个键值对时,通过判断键值对的版本号,可以知道数据的新旧关系。
在如上所述的分层方式下,键值存储***的写入操作包括:
获取键值对的全局版本号,递增,并编码到键中;
将数据以追加写的方式写入WAL;
将数据写入内存buffer,返回;
键值存储***的查找操作包括:
查询内存buffer和缓存,如果存在,返回数据,否则进行下一步;
从L1到Ln层,对磁盘中的每个层次Lb依次查找,其中1≤b≤n,维护一个线程池,线程池中线程的数量为max(S1,S2,…,Sn),对于Lb,向线程池提交Sb个读取任务,线程threadj对Lb,j进行二分查找,1<j<Sb
汇总Sb个线程的读取结果,如果有任意个线程读取到数据,选择版本号最大的数据返回,读取结束,如果没有线程读取到数据,继续读取Lb+1
若所有层次都读取完毕,仍未读取到数据,返回数据不存在。
范围查询操作包括:
利用Seek(k)接口寻找大于等于k的最小键所对应的键值对:向线程池提交多个查询任务,每个线程负责查询一个子层次或内存buffer,每个线程通过二分法查找大于等于k的最小键,如果每个线程都没有读到数据,返回数据不存在;否则,对于读取到数据的线程,从读到的数据开始构造迭代器,并将读取到的数据根据版本号排序,取出版本最新的数据返回;
利用Next()接口找到***中大于当前找到的键的最小键所对应的键值对:如果Seek(k)找到了数据,当用户提交一个Next()请求,上次返回结果的迭代器运行一次Next(),再次将每个迭代器当前指向的数据进行比较,返回最新数据,在此期间,旧版本的数据被忽略。
还可以通过建立模型刻画***在不同参数下的写放大。通过最小化写放大,获取使***写性能最优的参数。具体的模型建立步骤同前述方法实施例中,此处不再赘述。
根据本发明的另一实施例,还提供一种键值对存储设备,所述设备包括:
一个或多个处理器;
存储器;以及
一个或多个计算机程序,所述一个或多个计算机程序存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,当所述一个或多个计算机程序被所述一个或多个处理器执行时,致使所述一个或多个处理器执行包括如前方法实施例中所述的面向LSM树的键值存储方法的步骤。
本领域内的技术人员应明白,本发明实施例中的实施例可提供为方法、***、或计算机程序产品。因此,本发明实施例中可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例中可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例中是参照根据本发明实施例中实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例中的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例中范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例中实施例进行各种改动和变型而不脱离本发明实施例中实施例的精神和范围。这样,倘若本发明实施例中实施例的这些修改和变型属于本发明实施例中权利要求及其等同技术的范围之内,则本发明实施例中也意图包含这些改动和变型在内。

Claims (7)

1.一种面向LSM树的键值存储方法,其特征在于,所述方法包括:
将LSM树的一个层次划分为多个子层次,第i层的第j个子层次标记为Li.j,子层次中的SSTable文件按照键的范围从左到右递增排列;
每层维护一个compaction指针,用于选择compaction任务的第一个输入文件;
当第i层Li的总数据量超过额定大小时,在该层触发一次compaction,将Li层的部分数据写入Li+1层,实现对磁盘数据的重新组织,其中在执行compaction任务时,Li层的所有子层次均参与任务,而Li+1层仅有一个子层次参与任务;
对于Li层的一次compaction任务,其步骤包括:
依据Li层的compaction指针,在Li的第一个子层次Li.1选取所包含的最小键大于等于该指针且最接近该指针的SSTable文件作为任务初始输入文件,加入compaction任务的输入文件集,将该文件的最小键作为任务左边界,将该文件的最大键作为任务右边界;
对于Li层的其他子层次依次选取部分或全部在左右边界之内的文件并加入输入文件集,其中Si表示Li层中划分的子层次数目;
依据输入文件集中文件的最小键和最大键扩展当前任务边界,以使任务包含更多完全位于边界内的文件;
在Li+1层中选择当前数据量最少的子层次Li+1,j,依据任务边界从Li+1,j中选择位于边界内或与边界有重叠的文件加入候选文件集,通过候选文件集中的文件对compaction任务进行分割,仅将任务分割后仍需参与任务的文件加入输入文件集;
对于输入文件集,将位于Li层且在任务边界内的数据及位于Li+1,j层的数据进行多路归并排序,生成新文件并写入Li+1,j
对于输入文件集,将位于Li层且在任务边界外的数据进行多路归并排序,将生成的新文件中小于任务左边界的数据写入Li层,新文件中大于任务右边界的数据写入Li层的compaction缓存,并在日志中记录缓存文件的最小键、最大键,以及输入文件集中与该缓存文件有重叠的文件,将输入文件集中未被记录到日志中的文件删除;
将Li层的compaction指针替换为本次compaction任务的右边界。
2.根据权利要求1所述的面向LSM树的键值存储方法,其特征在于,对任务进行分割的具体步骤包括:
对于候选文件集中的每个文件,通过在内存中的元数据获取其所包含的最小键kmin和最大键kmax
根据kmin与kmax对输入文件集中的文件进行查询,如果对于输入文件集中的每个文件,[kmin,kmax]与该文件不重叠,或者在该文件中小于kmin的最大键和大于kmax的最小键之间不存在其他键值对,则将该候选文件移出候选文件集,并根据kmin和kmax将输入文件集中的文件切割为两部分,一部分所包含的键小于kmin,另一部分所包含的键大于kmax,否则,将该候选文件移出候选文件集并加入输入文件集。
3.根据权利要求1所述的面向LSM树的键值存储方法,其特征在于,所述Li层在LD+2~Ln层之间,其中n为LSM树的层次数目,D为设定的层次分界线参数,1≤D≤n;所述方法还包括:
对于L1~LD,采取tieredcompaction算法,一次性将本层的全部数据进行排序,将新生成的文件写入下一层,在下一层形成一个新的子层次,在此期间,没有下层数据参与排序;
对于LD+1,将本层全部数据与下层的一个子层次的数据进行排序,将新生成的数据写入下层选中的子层次中。
4.根据权利要求3所述的面向LSM树的键值存储方法,其特征在于,在此分层方式下,写入操作包括:
获取用于键值对而维护的一个全局版本号,递增,并编码到键中;
将数据以追加写的方式写入WAL;
将数据写入内存buffer,返回;
查找操作包括:
查询内存buffer,如果存在,返回数据,否则进行下一步;
从L1到Ln层,对磁盘中的每个层次Lb依次查找,其中1≤b≤n,维护一个线程池,线程池中线程的数量为max(S1,S2,…,Sn),对于Lb,向线程池提交Sb个读取任务,线程threadj对Lb,j进行二分查找,1<j<Sb
汇总Sb个线程的读取结果,如果有任意个线程读取到数据,选择版本号最大的数据返回,读取结束,如果没有线程读取到数据,继续读取Lb+1
若所有层次都读取完毕,仍未读取到数据,返回数据不存在。
5.根据权利要求4所述的面向LSM树的键值存储方法,其特征在于,范围查询操作包括:
利用Seek(k)接口寻找大于等于k的最小键所对应的键值对:向线程池提交多个查询任务,每个线程负责查询一个子层次或内存buffer,每个线程通过二分法查找大于等于k的最小键,如果每个线程都没有读到数据,返回数据不存在;否则,对于读取到数据的线程,从读到的数据开始构造迭代器,并将读取到的数据根据版本号排序,取出版本最新的数据返回;
利用Next()接口找到***中大于当前找到的键的最小键所对应的键值对:如果Seek(k)找到了数据,当用户提交一个Next()请求,上次返回结果的迭代器运行一次Next(),再次将每个迭代器当前指向的数据进行比较,返回最新数据,在此期间,旧版本的数据被忽略。
6.一种面向LSM树的键值存储***,其特征在于,包括:
第一存储部,其存储包含n个层次的LSM树的前D个层次,并采取使写放大最小化的tieredcompaction算法执行compaction任务,其中D表示设定的层次分界线参数;
第二存储部,其存储所述LSM树的第D+1层,并采取包含如下步骤的compaction方法执行compaction任务:
选取该层所有子层次的所有文件加入输入文件集;
在LD+2层中选择当前数据量最少的子层次LD+2,j,依据LD+1数据所包含的范围从LD+2,j中选择所有重叠文件加入输入文件集;
将输入文件集中的数据进行多路归并排序,将新生成的文件放入下层选中的子层次中;
第三存储部,其存储所述LSM树的LD+2~Ln层,并采取包括如下步骤的compaction方法执行compaction任务:
将LSM树的一个层次Li划分为多个子层次,第i层的第j个子层次标记为Li.j,子层次中的SSTable文件按照键的范围从左到右递增排列;
每层维护一个compaction指针,用于选择compaction任务的第一个输入文件;
当第i层Li的总数据量超过额定大小时,在该层触发一次compaction,将Li层的部分数据写入Li+1层,实现对磁盘数据的重新组织,其中在执行compaction任务时,Li层的所有子层次均参与任务,而Li+1层仅有一个子层次参与任务;
所述第三存储部对于一次compaction任务包括以下步骤:
依据Li的compaction指针,在Li的第一个子层次Li.1选取所包含的最小键大于等于该指针且最接近该指针的SSTable文件作为任务初始输入文件,加入compaction任务的输入文件集,将该文件的最小键作为任务左边界,将该文件的最大键作为任务右边界;
对于本层的其他子层次依次选取部分或全部在左右边界之内的文件并加入输入文件集,其中Si表示层Li中划分的子层次数目;
依据输入文件集中文件的最小键和最大键扩展当前任务边界,以使任务包含更多完全位于边界内的文件;
在Li+1层中选择当前数据量最少的子层次Li+1,j,依据任务边界从Li+1,j中选择位于边界内或与边界有重叠的文件加入候选文件集,通过候选文件集中的文件对compaction任务进行分割,仅将任务分割后仍需参与任务的文件加入输入文件集;
对于输入文件集,将位于Li且在任务边界内的数据及位于Li+1,j的数据进行多路归并排序,生成新文件并写入Li+1,j
对于输入文件集,将位于Li且在任务边界外的数据进行多路归并排序,将生成的新文件中小于任务左边界的数据写入Li,新文件中大于任务右边界的数据写入本层的compaction缓存,并在日志中记录缓存文件的最小键、最大键,以及输入文件集中与该缓存文件有重叠的文件,将输入文件集中未被记录到日志中的文件删除;
将本层的compaction指针替换为本次compaction任务的右边界。
7.一种键值对存储设备,其特征在于,所述设备包括:
一个或多个处理器;
存储器;以及
一个或多个计算机程序,所述一个或多个计算机程序存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,当所述一个或多个计算机程序被所述一个或多个处理器执行时,致使所述一个或多个处理器执行包括如权利要求1-5中任一项所述的面向LSM树的键值存储方法的步骤。
CN202110573140.8A 2021-05-25 2021-05-25 一种面向lsm树的键值存储方法和存储*** Active CN113297136B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202110573140.8A CN113297136B (zh) 2021-05-25 2021-05-25 一种面向lsm树的键值存储方法和存储***
PCT/CN2021/103902 WO2022246953A1 (zh) 2021-05-25 2021-07-01 一种面向lsm树的键值存储方法和存储***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110573140.8A CN113297136B (zh) 2021-05-25 2021-05-25 一种面向lsm树的键值存储方法和存储***

Publications (2)

Publication Number Publication Date
CN113297136A CN113297136A (zh) 2021-08-24
CN113297136B true CN113297136B (zh) 2023-11-03

Family

ID=77325052

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110573140.8A Active CN113297136B (zh) 2021-05-25 2021-05-25 一种面向lsm树的键值存储方法和存储***

Country Status (2)

Country Link
CN (1) CN113297136B (zh)
WO (1) WO2022246953A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114237507B (zh) * 2021-11-02 2024-04-12 支付宝(杭州)信息技术有限公司 管理数据的方法及装置
CN114817263A (zh) * 2022-04-28 2022-07-29 北京达佳互联信息技术有限公司 数据处理方法、装置、电子设备及存储介质
CN117891395B (zh) * 2023-12-26 2024-07-16 天津中科曙光存储科技有限公司 数据存储方法、装置、计算机设备和存储介质
CN117785890B (zh) * 2024-02-27 2024-06-28 支付宝(杭州)信息技术有限公司 一种基于lsm树的数据遍历查询方法及相关设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107038206A (zh) * 2017-01-17 2017-08-11 阿里巴巴集团控股有限公司 Lsm树的建立方法、lsm树的数据读取方法和服务器
CN107247624A (zh) * 2017-06-05 2017-10-13 安徽大学 一种面向Key‑Value***的协同优化方法及***
CN107291541A (zh) * 2017-06-23 2017-10-24 安徽大学 面向Key‑Value***的compaction粗粒度进程级并行优化方法及***
CN110347336A (zh) * 2019-06-10 2019-10-18 华中科技大学 一种基于nvm与ssd混合存储结构的键值存储***
CN111226205A (zh) * 2017-08-31 2020-06-02 美光科技公司 Kvs树数据库

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108804019B (zh) * 2017-04-27 2020-07-07 华为技术有限公司 一种数据存储方法及装置
US11093472B2 (en) * 2018-12-07 2021-08-17 Vmware, Inc. Using an LSM tree file structure for the on-disk format of an object storage platform
US11074225B2 (en) * 2018-12-21 2021-07-27 Vmware, Inc. Synchronization of index copies in an LSM tree file system
US11176099B2 (en) * 2018-12-21 2021-11-16 Vmware, Inc. Lockless synchronization of LSM tree metadata in a distributed system
CN111352908B (zh) * 2020-02-28 2023-10-10 北京奇艺世纪科技有限公司 基于lsm的数据存储方法、装置、存储介质及计算机设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107038206A (zh) * 2017-01-17 2017-08-11 阿里巴巴集团控股有限公司 Lsm树的建立方法、lsm树的数据读取方法和服务器
CN107247624A (zh) * 2017-06-05 2017-10-13 安徽大学 一种面向Key‑Value***的协同优化方法及***
CN107291541A (zh) * 2017-06-23 2017-10-24 安徽大学 面向Key‑Value***的compaction粗粒度进程级并行优化方法及***
CN111226205A (zh) * 2017-08-31 2020-06-02 美光科技公司 Kvs树数据库
CN110347336A (zh) * 2019-06-10 2019-10-18 华中科技大学 一种基于nvm与ssd混合存储结构的键值存储***

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Yunpeng Chai等.LDC: A Lower-Level Driven Compaction Method to Optimize SSD-Oriented Key-Value Stores.《2019 IEEE 35th International Conference on Data Engineering (ICDE)》.2019,第722-733页. *
Zhang, Weitao等.Deduplication Triggered Compaction for LSM-tree Based Key-Value Store.《PROCEEDINGS OF 2018 IEEE 9TH INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING AND SERVICE SCIENCE (ICSESS)》.2019,第719-722页. *
张伟韬.基于LSM-tree的KV数据库性能优化.《中国博士学位论文全文数据库信息科技辑》.2019,I138-33. *
饶毓琳.基于LSM-Tree的持久化缓存机制的优化研究.《中国优秀硕士学位论文全文数据库 信息科技辑》.2017,I138-227. *

Also Published As

Publication number Publication date
WO2022246953A1 (zh) 2022-12-01
CN113297136A (zh) 2021-08-24

Similar Documents

Publication Publication Date Title
CN113297136B (zh) 一种面向lsm树的键值存储方法和存储***
Tsirogiannis et al. Query processing techniques for solid state drives
US20170212680A1 (en) Adaptive prefix tree based order partitioned data storage system
CN102890722B (zh) 应用于时序历史数据库的索引方法
CN106716409B (zh) 一种构建和更新列存储数据库的方法和***
US8280858B2 (en) Storage pool scrubbing with concurrent snapshots
JPH02230373A (ja) データベース処理装置及びデータベース処理方法
Yang et al. Leaper: A learned prefetcher for cache invalidation in LSM-tree based storage engines
CN107329982A (zh) 一种基于分布式列式存储的大数据并行计算方法及***
CN107710201B (zh) 存储数据和从位向量搜索索引取回数据
Bernstein et al. Optimizing optimistic concurrency control for tree-structured, log-structured databases
US20170068675A1 (en) Method and system for adapting a database kernel using machine learning
CN110188108A (zh) 数据存储方法、装置、***、计算机设备及存储介质
JP6020448B2 (ja) データベース性能予測装置及びデータベース予測方法
CN113268457B (zh) 一种支持高效写的自适应学习索引方法和***
US20170116232A1 (en) Periodic performance optimization through heatmap based management of an in-memory area
US6745198B1 (en) Parallel spatial join index
CN113590612A (zh) Dram-nvm混合索引结构的构建方法及操作方法
Mukherjee Synthesis of non-replicated dynamic fragment allocation algorithm in distributed database systems
CN116186085A (zh) 一种基于缓存梯度冷热数据分层机制的键值存储***及方法
Wang et al. PA-tree: Polled-mode asynchronous B+ tree for NVMe
KR20160121819A (ko) 이종 메모리 기반 데이터 관리 장치
CN116204130A (zh) 一种键值存储***和键值存储***的管理方法
Wu et al. A data management method for databases using hybrid storage systems
CN113204520B (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