CN104809237A - LSM-tree索引的优化方法和装置 - Google Patents
LSM-tree索引的优化方法和装置 Download PDFInfo
- Publication number
- CN104809237A CN104809237A CN201510239570.0A CN201510239570A CN104809237A CN 104809237 A CN104809237 A CN 104809237A CN 201510239570 A CN201510239570 A CN 201510239570A CN 104809237 A CN104809237 A CN 104809237A
- Authority
- CN
- China
- Prior art keywords
- data
- tree
- lsm
- index structure
- current operation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Abstract
本发明实施例公开了一种LSM-tree索引的优化方法和装置。所述方法包括:将写入内存中的数据按照LSM-tree内存索引结构进行存储;当基于所述内存索引结构存储的内存数据满足写入阈值条件时,按照第一合并算法,对所述内存数据进行合并;将合并后的所述内存数据按照LSM-tree磁盘索引结构写入磁盘文件中。本发明的技术方案解决了现有技术在频繁更新相同Key数据项的场景下所带来的CPU消耗过大、数据库对外的吞吐量降低、I/O操作过多以及引入内存缓存等技术问题,显著降低了CPU消耗,提高了数据库对外的吞吐量,同时避免了使用内存缓存而带来的额外内存开销以及性能降低等问题。
Description
技术领域
本发明实施例涉及数据处理技术,尤其涉及一种LSM-tree索引的优化方法和装置。
背景技术
LSM-tree(The Log-Structured Merge-Tree,日志结构的合并树)是很多现代数据库的底层索引结构,该索引结构的基本思想是把数据的变更操作首先保存在内存中,当内存中的数据规模到达一个阈值之后,将内存中的数据批量、有序地写入磁盘,并通过一定的分层整理算法将新落盘的数据与老的数据做滚动合并。其中,在LSM-tree索引结构中,数据是按照键值(Key-Value)对的方式进行存储的。每一个键(Key)中存储有对应的值(Value),通过键名可以查找到相应的数据值(也称为数据项),进而可以对数据项进行一定的操作。
一般来说,内存中会存储有与相同Key对应的多个数据项(例如,对某个热门站点首页的持续抓取所产生的数据项),并为不同数据项赋予不同的版本号。在磁盘中,针对Key相同的数据项,新版本会覆盖或屏蔽旧的版本。
发明人通过研究发现,针对LSM-tree索引结构在频繁更新相同Key数据项的场景下,现有的处理机制会产生CPU(Central Processing Unit,中央处理器)消耗过大、数据库对外的吞吐量降低、I/O(input/output,输入输出)操作过多以及引入内存缓存等技术问题。
发明内容
有鉴于此,本发明实施例提供一种LSM-tree索引的优化方法和装置,以优化现有的LSM-tree索引结构在频繁更新相同Key数据项的场景下的处理机制,显著降低CPU消耗,提高数据库对外的吞吐量。
在第一方面,本发明实施例提供了一种LSM-tree索引的优化方法,包括:
将写入内存中的数据按照LSM-tree内存索引结构进行存储;
当基于所述内存索引结构存储的内存数据满足写入阈值条件时,按照第一合并算法,对所述内存数据进行合并;
将合并后的所述内存数据按照LSM-tree磁盘索引结构写入磁盘文件中。
在第二方面,本发明实施例提供了一种LSM-tree索引的优化装置,包括:
内存数据存储模块,用于将写入内存中的数据按照LSM-tree内存索引结构进行存储;
内存数据合并模块,用于当基于所述内存索引结构存储的内存数据满足写入阈值条件时,按照第一合并算法,对所述内存数据进行合并;
磁盘文件写入模块,用于将合并后的所述内存数据按照LSM-tree磁盘索引结构写入磁盘文件中。
本发明实施例通过按照LSM-tree索引结构来存储内存中写入的数据的方式,巧妙的利用了LSM-tree索引结构在存储数据时使用的合并操作,将相同Key数据项的合并操作下放至内存数据的存储过程中完成。解决了现有技术在频繁更新相同Key数据项的场景下,所带来的CPU消耗过大、数据库对外的吞吐量降低、I/O操作过多以及引入内存缓存等技术问题,显著降低了CPU消耗,提高了数据库对外的吞吐量,同时避免了使用内存缓存而带来的额外内存开销以及性能降低等问题。
附图说明
图1是现有技术中频繁操作相同Key场景下数据项临时合并示意图;
图2是本发明第一实施例的一种LSM-tree索引的优化方法的流程图;
图3是本发明第二实施例的一种LSM-tree索引的优化方法的流程图;
图4是本发明第三实施例的一种LSM-tree索引的优化方法的流程图;
图5是本发明第四实施例的一种LSM-tree索引的优化方法的流程图;
图6是本发明实施例的一种嵌套式LSM-tree索引模型的结构示意图;
图7是本发明第五实施例的一种LSM-tree索引的优化装置的结构图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明具体实施例作进一步的详细描述。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
为了便于后续理解,首先将LSM-tree索引的基本原理以及针对LSM-tree索引结构在频繁更新相同Key数据项的场景下,现有的处理机制简述如下:
如前所述(背景技术部分),在磁盘中,针对相同Key数据项,新版本会覆盖或屏蔽旧的版本。由于磁盘中的各份数据是有序的,合并的过程通过线性的多路归并会非常高效。LSM-tree索引通过将数据变更操作赋予不同的版本号,使得数据的更新和删除操作产生的磁盘I/O由随机访问转化为顺序访问。通过定期地整理过期版本的方式,对于磁盘这样的旋转形介质能够显著的提升吞吐率。
然而,LSM-tree索引在频繁更新相同Key数据项的场景下,存在两个明显的性能问题:
1、当需要读取LSM-tree索引结构中的数据时,需要首先读取内存中的数据,当内存中不具有该数据时,才会继续读取磁盘中的数据。当顺序读取内存中的某个区间时,如果该区间的某些数据项存在很多版本(或者说,相同Key的多个数据项),读取的有效速度会显著下降,这是因为需要在读取的过程中临时合并很多版本,产生了明显的CPU消耗;
2、版本合并算法不合理,造成局部大量的过期版本被整理掉,导致落盘的文件中数据过于稀疏,在后续与老数据的合并过程中产生多余的I/O操作。
在现有技术中,针对LSM-tree索引的同Key多版本合并优化目前普遍采用如下两者方案来解决:
1、在内存数据满刷到磁盘的时候进行版本合并:内存的跳表结构中保留一段时间内的所有数据变更,包括相同Key数据项的各次变更。直到内存占用大小达到一定阈值后,才将内存中数据整理到第0层的磁盘文件。在写入到第0层文件的过程中,整理算法将相同Key的多个数据进行合并,保留最新的版本。后续磁盘文件后台调度合并,即:以Key的取值区间为每次的合并单元,将相邻两层的数据做合并,第n层的数据文件与第n+1层中相同取值范围的数据合并,产生新的第n+1层数据文件;
2、利用内存缓存保存相同Key的最新版本的Value,在读取的时候直接返回最新的版本的Value给调用者,避免临时合并带来的开销。
其中,方案1的缺点在于:在频繁更新相同Key数据项的场景下,内存中会囤积相同Key数据项的成百上千个版本,如果此时用户有发起了顺序读取操作,只能将内存中各个Key的多个版本进行临时合并。当读取频繁的情况下,每次读取都会触发临时合并,导致CPU被占满,进而降低整个数据库对外的吞吐率。在图1中示出了频繁操作相同Key场景下数据项临时合并示意图;另外,由于内存中(也称MemStore)存储了大量的过期版本,当内存中的数据写入到第0层的磁盘文件后,写入数据的大小相对于内存中存储数据的大小明显缩水,极端情况下,一个文件可能只含有几个数据项(例如,数据在内存中已经占32MB了,但是当它写入到第0层磁盘文件后,由于大量过期版本被丢弃,实际生成的文件只有10KB),当磁盘中的第0层文件和第1层文件进行合并的过程中,大量没被更新的数据项也被读出并写入到新生成的文件中,所以实际有效的I/O操作非常少;
而方案2的缺点在于:缓存(也称Cache)引入了额外的内存开销;维护缓存中数据和LSM-tree索引结构中数据的一致性需要加锁,降低了性能;受访问分布规律影响较大,当缓存命中率不够高时,优化效果并不明显。
第一实施例
图2为本发明第一实施例提供的一种LSM-tree索引的优化方法的流程图,本实施例的方法可以由LSM-tree索引的优化装置来执行,该装置可通过硬件和/或软件的方式实现,并一般可集成于用于存储海量LSM-tree索引结构数据的服务器中,其中,所述服务器可以为单个服务器,也可以为多个服务器构成的集群服务器。由于本发明实施例针对频繁更新相同Key数据项的场景下会有明显的优化效果,所述服务器优选可以为搜索引擎服务器。
本实施例的方法具体包括:
210、将写入内存中的数据按照LSM-tree内存索引结构进行存储。
在传统的LSM-tree索引结构中,内存中的数据通常按照平衡树或者跳表等形式的索引结构进行存储,而磁盘中存储的数据则按照LSM-tree索引结构进行存储,即:将写入磁盘中的数据按照一定的合并算法进行数据合并后进行分层存储。由于内存中存储的数据不会进行数据合并,因此,频繁更新相同Key数据项的场景下,内存中会囤积有与相同Key对应的多个数据项,这是造成现有技术缺陷的主要原因。
在本实施例中,将LSM-tree索引结构引入了内存数据的存储过程中,也即将LSM-tree索引结构所使用的按照一定的合并算法进行数据合并后进行分层存储的操作首先应用在内存中。
这样设置的好处是:大大减少内存中与相同Key对应的数据项的数目,相应的,当用户发起了顺序读取操作,内存中需要临时合并的与相同Key对应的数据项的数目也大大减小,显著降低了CPU消耗,提高了数据库对外的吞吐量;同时,由于减少了与相同Key对应的数据项的数目,当内存中的数据量达到一定的阈值需要写入到磁盘文件时,实际写入的数据大小与内存中实际存储的数据量相差不大,进而可以提高磁盘I/O操作的有效性。
当然,可以理解的是,本实施例的方法由于将LSM-tree索引结构应用于内存数据的存储过程中,相对于现有技术其必然会造成一定的CPU消耗。但是本实施例的方法在在频繁更新相同Key数据项的场景下,其所带来的有益效果远远大于其所牺牲的CPU性能。
在本实施例中,所述LSM-tree内存索引结构具体是指与传统的LSM-tree索引结构相类似的,将内存中数据按照一定的合并算法进行数据合并后进行分层存储的索引结构。
其中,所述合并算法具体为将与相同Key对应的多个数据项进行合并的算法(后文将该合并算法命名为第二合并算法),例如:保留最大版本号合并算法、累加器合并算法或者字符串追加合并算法等,本实施例对此并不进行限制。
相应的,进行分层存储时所分层的数目可以根据实际情况进行预设,对此也并不进行限制。
其中,所述保留最大版本号合并算法是基于最大版本号(也称GetMaxVersoin)算子进行合并的,也就是说,相同Key对应的不同数据项均具有不同的版本号,每次合并,均保留最大版本号的数据项作为合并后的数据项;所述累加器合并算法是基于累加器(也称Counter Add)算子进行合并的,也就是说,所述数据项具体为一个特定的数值(例如,2、3或者5等),每次合并,将与相同Key对应的各个数据项进行累加后所生成的结果作为合并后的数据项;所述字符串追加合并算法是基于字符串追加(也称为String Append)算子进行合并的,也就是说,所述数据项具体为一个特定的字符串(例如,“as”、“gh”或者“er”等),每次合并,将与相同Key对应的各个数据项进行字符串叠加操作后所生成的结果作为合并后的数据项(例如,与相同Key对应的数据项分别为“as”、“gh”和“er”,通过字符串追加合并算法进行合并后,与该Key对应的数据项为“asgher”)。
220、当基于所述内存索引结构存储的内存数据满足写入阈值条件时,按照第一合并算法,对所述内存数据进行合并。
在本实施例中,所述写入阈值条件具体可以包括:所述LSM-tree内存索引结构所存储的全部数据大于设定的门限值,例如,16M或者32M等;或者所述LSM-tree内存索引结构的分层数目大于设定的门限值,例如,3层或者4层等;或者所述LSM-tree内存索引结构的设定层中所存储的数据大于设定的门限值等,本实施例对此并不进行限制。
所述第一合并算法具体为将与相同Key对应的多个数据项进行合并的算法,例如:保留最大版本号合并算法、累加器合并算法或者字符串追加合并算法等。
其中,所述第一合并算法可以与210中将写入内存中的数据按照LSM-tree内存索引结构进行存储时采用的合并算法相同,也可以不同。
在本实施例中,对所述内存数据进行合并具体为将相同Key对应的多个数据项进行合并,其中,可以仅将LSM-tree内存索引结构中的设定层中的数据项进行合并,也可以将LSM-tree内存索引结构中的全部层中的数据项进行合并,本实施例对此并不进行限制。
230、将合并后的所述内存数据按照LSM-tree磁盘索引结构写入磁盘文件中。
在本实施例中,所述LSM-tree磁盘索引结构即为传统的LSM-tree索引结构。相应的,合并后的内存数据会按照LSM-tree磁盘索引结构写入到磁盘文件中。
本发明实施例通过按照LSM-tree索引结构来存储内存中写入的数据的方式,巧妙的利用了LSM-tree索引结构在存储数据时使用的合并操作,将相同Key数据项的合并操作下放至内存数据的存储过程中来完成。解决了现有技术在频繁更新相同Key数据项的场景下,所带来的CPU消耗过大、数据库对外的吞吐量降低、I/O操作过多以及引入内存缓存等技术问题,显著降低了CPU消耗,提高了数据库对外的吞吐量以及I/O操作的有效性,同时避免了使用内存缓存而带来的额外内存开销以及性能降低等问题。
一般来说,互联网业务系统对数据的访问都具有局部热点,在这样的场景下,一个Key关联的数据会频繁的更新,也会被频繁的读取。举例而言,对于一个搜索引擎来说,为了保证搜索的时效性,搜索引擎的抓取系统会频繁地对同一个URL(Uniform Resource Locator,统一资源定位符)发起抓取,抓取的结果需要持久化到分布式数据库中。而且,在存到数据库之前需要先读取该URL的旧有属性,通过一定的策略合并新旧属性后再写入数据库。对于一些著名站点的首页、BBS页面这种需求非常普遍。
发明人通过研究发现:基于谷歌开源的分布式数据库(LevelDB)的单机索引结构,在频繁更新相同Key数据项的场景下具有性能下降的问题,通过应用本实施例的方法后,在真实抓取环境中分布式数据库的单机平均吞吐率提高了60%,在局部性高频相同Key偶发场景下,吞吐率了甚至提高10倍左右。
第二实施例
图3是本发明第二实施例的一种LSM-tree索引的优化方法的流程图。本实施例以上述实施例为基础进行优化,在本实施例中,将写入内存中的数据按照LSM-tree内存索引结构进行存储具体优化为:在有数据写入所述内存时,将所述数据存储于所述LSM-tree内存索引结构的最底层中,并将所述最底层作为当前操作层;根据当前操作层在所述LSM-tree内存索引结构中的位置,获取与所述当前操作层对应的合并阈值条件;在所述当前操作层中存储的数据满足所述合并阈值条件时,按照第二合并算法,对所述当前操作层中存储的数据进行合并;将合并结果存储于所述当前操作层的上一层中,并删除所述当前操作层中存储的数据;将所述当前操作层的上一层更新为当前操作层,并返回执行所述根据当前操作层在所述LSM-tree内存索引结构中的位置,获取与所述当前操作层对应的合并阈值条件的操作,直至所述当前操作层中存储的数据不满足所述合并阈值条件。
相应的,本实施例的方法具体包括:
310、在有数据写入所述内存时,将所述数据存储于所述LSM-tree内存索引结构的最底层中,并将所述最底层作为当前操作层。
与传统的LSM-tree内存索引结构相类似,在有数据写入内存时,首先将该写入数据存储于所述LSM-tree内存索引结构的最底层中,之后按照自下而上的方式进行合并存储。
320、根据当前操作层在所述LSM-tree内存索引结构中的位置,获取与所述当前操作层对应的合并阈值条件。
在本实施例中,考虑到所述LSM-tree内存索引结构的不同层中存储的数据形式并不完全相同,因此,位于所述LSM-tree内存索引结构中不同位置的当前操作层所对应的合并阈值条件并不完全相同。
举例而言,LSM-tree内存索引结构最底层中的数据是一个一个进行存储的,相应的,该层所对应的合并阈值条件可以为所存储的数据大小大于设定的阈值门限;LSM-tree内存索引结构最底层的上一层中的数据是通过将最底层中的数据合并之后生成的,因此该层中的数据是以数据块的形式进行存储的,该层所对应的合并阈值条件可以为所存储的数据大小大于设定的阈值门限或者所存储的数据块数目大于设定的数据块门限等。
330、判断在所述当前操作层中存储的数据是否满足所述合并阈值条件:若是,执行340;否则,执行370。
340、按照第二合并算法,对所述当前操作层中存储的数据进行合并,执行350。
在本实施例中,所述第二合并算法即为前文所述的将与相同Key对应的多个数据项进行合并的算法。
350、将合并结果存储于所述当前操作层的上一层中,并删除所述当前操作层中存储的数据,执行360。
在本实施例中,删除所述当前操作层中存储的数据具体可以包括:一次性的删除所述当前操作层中存储的全部数据;或者每当有数据要存储于所述当前操作层时,删除所述当前操作层中对应大小的数据等。其中,考虑到一次性删除操作对CPU的占用较大,优选在有数据要存储于所述当前操作层时,删除所述当前操作层中对应大小的数据。
360、将所述当前操作层的上一层更新为当前操作层,并返回执行330。
370、判断基于所述内存索引结构存储的内存数据是否满足写入阈值条件:若是,执行380;否则,返回310。
380、按照第一合并算法,对所述内存数据进行合并,执行390。
390、将合并后的所述内存数据按照LSM-tree磁盘索引结构写入磁盘文件中。
本实施例的方法具体限定了将写入内存中的数据按照LSM-tree内存索引结构进行存储的方式,即:首先将写入内存中的数据存储于LSM-tree内存索引结构的最底层,当最底层中的存储的数据满足一定的合并阈值条件之后,对最底层数据中相同Key对应的多个数据项进行合并后存储于上一层中,并删除该最底层中存储的数据,以此类推进行自底向上的存储。通过上述内存数据的存储方式,可以大大减少内存中与相同Key对应的数据项的数目,进而可以解决现有技术中所存在的问题。
第三实施例
图4是本发明第三实施例的一种LSM-tree索引的优化方法的流程图。本实施例以上述实施例为基础进行优化,在本实施例中,将所述LSM-tree内存索引结构具体优化为包括三层,自下向上分别为第零层、第一层和第二层;
将所述第零层的合并阈值条件具体优化为所述第零层中存储的数据大小大于第一数据阈值门限;
将所述第一层的合并阈值条件具体优化为所述第一层中存储的数据块数目大于数据块阈值门限。
相应的,本实施例的方法具体包括:
410、在有数据写入所述内存时,将所述数据存储于所述LSM-tree内存索引结构的第零层中。
综合考虑到在内存中使用LSM-tree内存索引结构对CPU的消耗问题,在本实施例中,将所述LSM-tree内存索引结构具体优化为包括三层,自下向上分别为第零层、第一层和第二层。
420、判断在所述第零层中存储的数据大小是否大于第一数据阈值门限:若是,执行430;否则,执行480。
在本实施例中,所述第一数据阈值门限可以根据实际情况进行预设,例如,0.5M或者1M等,对此并不进行限制。
430、按照第二合并算法,对所述第零层中存储的数据进行合并,执行440。
440、将合并结果存储于所述LSM-tree内存索引结构的第一层中,并删除所述第零层中存储的数据,执行450。
450、判断在所述第一层中存储的数据块数目是否大于数据块阈值门限:若是,执行460;否则,执行480。
在本实施例中,所述数据块阈值门限可以根据实际情况进行预设,例如,20或者30等,对此并不进行限制。
460、按照第二合并算法,对所述第一层中存储的数据块进行合并,执行470。
470、将合并结果存储于所述LSM-tree内存索引结构的第二层中,并删除所述第一层中存储的数据,执行480。
480、判断基于所述内存索引结构存储的内存数据是否满足写入阈值条件:若是,执行490;否则,返回410。
490、按照第一合并算法,对所述内存数据进行合并,执行4100。
考虑到最后数据合并结果的准确性以及合并算法的统一性,在本实施例的一个优选的实施方式中,所述第一合并算法与所述第二合并算法相同,且所述第一合并算法或者所述第二合并算法具体可以包括:保留最大版本号合并算法、累加器合并算法或者字符串追加合并算法。
4100、将合并后的所述内存数据按照LSM-tree磁盘索引结构写入磁盘文件中。
本实施例的方法考虑到在内存中引入LSM-tree内存索引结构所带来的CPU消耗,将所述LSM-tree内存索引结构具体设置为三层的结构,进一步优化了频繁更新相同Key数据项的场景下的处理机制,显著降低CPU消耗,提高数据库对外的吞吐量。
第四实施例
图5是本发明第四实施例的一种LSM-tree索引的优化方法的流程图。本实施例以上述实施例为基础进行优化,在本实施例中,将所述写入阈值条件具体优化为:所述LSM-tree内存索引结构所存储的全部数据大于第二数据阈值门限;
将按照第一合并算法,对所述内存数据进行合并具体优化为:在所述LSM-tree内存索引结构各层存储的数据中,获取与相同键Key对应的全部值Value;按照所述第一合并算法,将所述与相同Key对应的全部Value进行合并处理;
将合并后的所述内存数据按照LSM-tree磁盘索引结构写入磁盘文件中具体优化为:将合并后的所述内存数据写入所述磁盘文件中LSM-tree磁盘索引结构的最底层中。
相应的,本实施例的方法具体包括:
510、将写入内存中的数据按照LSM-tree内存索引结构进行存储。
520、判断基于所述内存索引结构存储的全部数据是否大于第二数据阈值门限:若是,执行530;否则,返回510。
在本实施例中,所述第二数据阈值门限可以根据实际情况进行预设,例如,16M或者32M等,对此并不进行限制。
530、在所述LSM-tree内存索引结构各层存储的数据中,获取与相同Key对应的全部Value,执行540。
可以理解的是,在所述LSM-tree内存索引结构中,越往下层其所存储的数据与相同Key对应的数据项数目越多,数据越新;越往上层其所存储的数据与相同Key对应的数据项数目越少,数据越旧。因此,可以根据实际需求对所述LSM-tree内存索引结构中的设定的一层或者多层中存储的数据进行合并。
在本实施例中,为了使得最终写入磁盘文件中的数据尽可能的完整无遗漏,在所述LSM-tree内存索引结构各层存储的数据中,获取与相同Key对应的全部Value。
540、按照所述第一合并算法,将所述与相同Key对应的全部Value进行合并处理,执行550。
550、将合并后的所述内存数据写入所述磁盘文件中LSM-tree磁盘索引结构的最底层中。
本实施例的方法同时在内存中和磁盘中使用了LSM-tree索引结构,通过上述这个嵌套式LSM-tree索引模型,可以大大减少内存中与相同Key对应的数据项的数目,进而可以解决现有技术中所存在的问题。其中,在图6中示出了上述嵌套式LSM-tree索引模型的结构示意图。
如图6所示,在内存中包括自下而上的三层(m0、m1和m3)LSM-tree内存索引结构;在磁盘中包括自下而上的三层(c0、c1和c2)LSM-tree磁盘索引结构,当内存中存储的数据满足写入阈值条件后,m0、m1和m3中与相同Key对应的全部Value会进行合并处理,并将处理结果写入磁盘中的c0层。
第五实施例
在图7中示出了本发明第五实施例的一种LSM-tree索引的优化装置的结构图。如图7所示,所述装置包括:
内存数据存储模块71,用于将写入内存中的数据按照LSM-tree内存索引结构进行存储。
内存数据合并模块72,用于当基于所述内存索引结构存储的内存数据满足写入阈值条件时,按照第一合并算法,对所述内存数据进行合并。
磁盘文件写入模块73,用于将合并后的所述内存数据按照LSM-tree磁盘索引结构写入磁盘文件中。
本发明实施例通过按照LSM-tree索引结构来存储内存中写入的数据的方式,巧妙的利用了LSM-tree索引结构在存储数据时使用的合并操作,将相同Key数据项的合并操作下放至内存数据的存储过程中来完成。解决了现有技术在频繁更新相同Key数据项的场景下,所带来的CPU消耗过大、数据库对外的吞吐量降低、I/O操作过多以及引入内存缓存等技术问题,显著降低了CPU消耗,提高了数据库对外的吞吐量,同时避免了使用内存缓存而带来的额外内存开销以及性能降低等问题。
在上述各实施例的基础上,所述内存数据存储模块具体可以用于:
在有数据写入所述内存时,将所述数据存储于所述LSM-tree内存索引结构的最底层中,并将所述最底层作为当前操作层;
根据当前操作层在所述LSM-tree内存索引结构中的位置,获取与所述当前操作层对应的合并阈值条件;
在所述当前操作层中存储的数据满足所述合并阈值条件时,按照第二合并算法,对所述当前操作层中存储的数据进行合并;
将合并结果存储于所述当前操作层的上一层中,并删除所述当前操作层中存储的数据;
将所述当前操作层的上一层更新为当前操作层,并返回执行所述根据当前操作层在所述LSM-tree内存索引结构中的位置,获取与所述当前操作层对应的合并阈值条件的操作,直至所述当前操作层中存储的数据不满足所述合并阈值条件。
在上述各实施例的基础上,所述LSM-tree内存索引结构可以包括三层,自下向上分别为第零层、第一层和第二层;
所述第零层的合并阈值条件可以为所述第零层中存储的数据大小大于第一数据阈值门限;
所述第一层的合并阈值条件可以为所述第一层中存储的数据块数目大于数据块阈值门限。
在上述各实施例的基础上,所述写入阈值条件可以包括:所述LSM-tree内存索引结构所存储的全部数据大于第二数据阈值门限。
在上述各实施例的基础上,所述内存数据合并模块具体可以用于:
在所述LSM-tree内存索引结构各层存储的数据中,获取与相同键Key对应的全部值Value;
按照所述第一合并算法,将所述与相同Key对应的全部Value进行合并处理。
在上述各实施例的基础上,所述第一合并算法与所述第二合并算法可以相同,且所述第一合并算法或者所述第二合并算法可以包括:
保留最大版本号合并算法、累加器合并算法或者字符串追加合并算法。
在上述各实施例的基础上,所述磁盘文件写入模块具体可以用于:
将合并后的所述内存数据写入所述磁盘文件中LSM-tree磁盘索引结构的最底层中。
本发明实施例所提供的LSM-tree索引的优化装置可用于执行本发明任意实施例提供的LSM-tree索引的优化方法,具备相应的功能模块,实现相同的有益效果。
显然,本领域技术人员应该明白,上述的本发明的各模块或各步骤可以通过如上所述的服务器来实施。可选地,本发明实施例可以用计算机装置可执行的程序来实现,从而可以将它们存储在存储装置中由处理器来执行,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等;或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种日志结构的合并树LSM-tree索引的优化方法,其特征在于,包括:
将写入内存中的数据按照LSM-tree内存索引结构进行存储;
当基于所述内存索引结构存储的内存数据满足写入阈值条件时,按照第一合并算法,对所述内存数据进行合并;
将合并后的所述内存数据按照LSM-tree磁盘索引结构写入磁盘文件中。
2.根据权利要求1所述的方法,其特征在于,将写入内存中的数据按照LSM-tree内存索引结构进行存储包括:
在有数据写入所述内存时,将所述数据存储于所述LSM-tree内存索引结构的最底层中,并将所述最底层作为当前操作层;
根据当前操作层在所述LSM-tree内存索引结构中的位置,获取与所述当前操作层对应的合并阈值条件;
在所述当前操作层中存储的数据满足所述合并阈值条件时,按照第二合并算法,对所述当前操作层中存储的数据进行合并;
将合并结果存储于所述当前操作层的上一层中,并删除所述当前操作层中存储的数据;
将所述当前操作层的上一层更新为当前操作层,并返回执行所述根据当前操作层在所述LSM-tree内存索引结构中的位置,获取与所述当前操作层对应的合并阈值条件的操作,直至所述当前操作层中存储的数据不满足所述合并阈值条件。
3.根据权利要求2所述的方法,其特征在于:
所述LSM-tree内存索引结构包括三层,自下向上分别为第零层、第一层和第二层;
所述第零层的合并阈值条件为所述第零层中存储的数据大小大于第一数据阈值门限;
所述第一层的合并阈值条件为所述第一层中存储的数据块数目大于数据块阈值门限。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述写入阈值条件包括:所述LSM-tree内存索引结构所存储的全部数据大于第二数据阈值门限。
5.根据权利要求1-3任一项所述的方法,其特征在于,按照第一合并算法,对所述内存数据进行合并包括:
在所述LSM-tree内存索引结构各层存储的数据中,获取与相同键Key对应的全部值Value;
按照所述第一合并算法,将所述与相同Key对应的全部Value进行合并处理。
6.根据权利要求2或3所述的方法,其特征在于,所述第一合并算法与所述第二合并算法相同,且所述第一合并算法或者所述第二合并算法包括:
保留最大版本号合并算法、累加器合并算法或者字符串追加合并算法。
7.根据权利要求1所述的方法,其特征在于,将合并后的所述内存数据按照LSM-tree磁盘索引结构写入磁盘文件中包括:
将合并后的所述内存数据写入所述磁盘文件中LSM-tree磁盘索引结构的最底层中。
8.一种日志结构的合并树LSM-tree索引的优化装置,其特征在于,包括:
内存数据存储模块,用于将写入内存中的数据按照LSM-tree内存索引结构进行存储;
内存数据合并模块,用于当基于所述内存索引结构存储的内存数据满足写入阈值条件时,按照第一合并算法,对所述内存数据进行合并;
磁盘文件写入模块,用于将合并后的所述内存数据按照LSM-tree磁盘索引结构写入磁盘文件中。
9.根据权利要求8所述的装置,其特征在于,所述内存数据存储模块具体用于:
在有数据写入所述内存时,将所述数据存储于所述LSM-tree内存索引结构的最底层中,并将所述最底层作为当前操作层;
根据当前操作层在所述LSM-tree内存索引结构中的位置,获取与所述当前操作层对应的合并阈值条件;
在所述当前操作层中存储的数据满足所述合并阈值条件时,按照第二合并算法,对所述当前操作层中存储的数据进行合并;
将合并结果存储于所述当前操作层的上一层中,并删除所述当前操作层中存储的数据;
将所述当前操作层的上一层更新为当前操作层,并返回执行所述根据当前操作层在所述LSM-tree内存索引结构中的位置,获取与所述当前操作层对应的合并阈值条件的操作,直至所述当前操作层中存储的数据不满足所述合并阈值条件。
10.根据权利要求9所述的装置,其特征在于:
所述LSM-tree内存索引结构包括三层,自下向上分别为第零层、第一层和第二层;
所述第零层的合并阈值条件为所述第零层中存储的数据大小大于第一数据阈值门限;
所述第一层的合并阈值条件为所述第一层中存储的数据块数目大于数据块阈值门限。
11.根据权利要求8-10任一项所述的装置,其特征在于,所述写入阈值条件包括:所述LSM-tree内存索引结构所存储的全部数据大于第二数据阈值门限。
12.根据权利要求8-10任一项所述的装置,其特征在于,所述内存数据合并模块具体用于:
在所述LSM-tree内存索引结构各层存储的数据中,获取与相同键Key对应的全部值Value;
按照所述第一合并算法,将所述与相同Key对应的全部Value进行合并处理。
13.根据权利要求9或10所述的装置,其特征在于,所述第一合并算法与所述第二合并算法相同,且所述第一合并算法或者所述第二合并算法包括:
保留最大版本号合并算法、累加器合并算法或者字符串追加合并算法。
14.根据权利要求8所述的装置,其特征在于,所述磁盘文件写入模块具体用于:
将合并后的所述内存数据写入所述磁盘文件中LSM-tree磁盘索引结构的最底层中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510239570.0A CN104809237B (zh) | 2015-05-12 | 2015-05-12 | LSM-tree索引的优化方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510239570.0A CN104809237B (zh) | 2015-05-12 | 2015-05-12 | LSM-tree索引的优化方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104809237A true CN104809237A (zh) | 2015-07-29 |
CN104809237B CN104809237B (zh) | 2018-12-14 |
Family
ID=53694059
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510239570.0A Active CN104809237B (zh) | 2015-05-12 | 2015-05-12 | LSM-tree索引的优化方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104809237B (zh) |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138622A (zh) * | 2015-08-14 | 2015-12-09 | 中国科学院计算技术研究所 | 用于lsm树存储系统的插入操作及负载的读取和合并方法 |
CN105487820A (zh) * | 2015-11-30 | 2016-04-13 | 中国科学院信息工程研究所 | 一种基于时间片轮转机制的树状存储结构写放大优化方法 |
CN105512325A (zh) * | 2015-12-21 | 2016-04-20 | 华为技术有限公司 | 多版本数据索引的更新、删除与建立方法及装置 |
CN106569893A (zh) * | 2015-10-09 | 2017-04-19 | 阿里巴巴集团控股有限公司 | 流量控制方法及设备 |
CN106599247A (zh) * | 2016-12-19 | 2017-04-26 | 北京奇虎科技有限公司 | LSM‑tree结构中数据文件的合并方法及装置 |
CN106844650A (zh) * | 2017-01-20 | 2017-06-13 | 中国科学院计算技术研究所 | 一种日志合并树的合并方法及系统 |
CN107844511A (zh) * | 2017-06-16 | 2018-03-27 | 珠海金山网络游戏科技有限公司 | 一种基于周期成本的游戏资源缓存方法和系统 |
CN108021702A (zh) * | 2017-12-26 | 2018-05-11 | 百度在线网络技术(北京)有限公司 | 基于LSM-tree的分级存储方法、装置、OLAP数据库系统及介质 |
WO2018171296A1 (zh) * | 2017-03-22 | 2018-09-27 | 华为技术有限公司 | 一种文件合并方法及控制器 |
CN109213445A (zh) * | 2018-08-23 | 2019-01-15 | 郑州云海信息技术有限公司 | 一种存储系统元数据的管理方法、管理系统及相关装置 |
CN109240993A (zh) * | 2018-07-24 | 2019-01-18 | 郑州云海信息技术有限公司 | 元数据管理方法以及存储服务器 |
CN109271570A (zh) * | 2018-10-30 | 2019-01-25 | 郑州云海信息技术有限公司 | 一种元数据管理查询的方法 |
CN109521963A (zh) * | 2018-11-14 | 2019-03-26 | 郑州云海信息技术有限公司 | 一种元数据落盘方法及装置 |
CN109614045A (zh) * | 2018-12-06 | 2019-04-12 | 广东浪潮大数据研究有限公司 | 一种元数据落盘方法、装置及相关设备 |
CN110413413A (zh) * | 2019-07-26 | 2019-11-05 | 北京蜜莱坞网络科技有限公司 | 一种数据写入方法、装置、设备及存储介质 |
TWI702503B (zh) * | 2017-02-09 | 2020-08-21 | 美商美光科技公司 | 實施用於維護操作之合併樹修改之系統、方法及電腦可讀媒體 |
CN111722785A (zh) * | 2019-03-21 | 2020-09-29 | 阿里巴巴集团控股有限公司 | 一种缓存更新方法和装置 |
CN112015791A (zh) * | 2019-05-30 | 2020-12-01 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置、电子设备及计算机存储介质 |
CN112236759A (zh) * | 2018-09-14 | 2021-01-15 | 谷歌有限责任公司 | 日志结构合并森林中的交错合并 |
CN112732191A (zh) * | 2021-01-08 | 2021-04-30 | 苏州浪潮智能科技有限公司 | 基于日志结构合并树合并数据的方法、系统、设备及介质 |
CN112954244A (zh) * | 2021-01-19 | 2021-06-11 | 普联技术有限公司 | 监控录像的存储实现方法、装置、设备及存储介质 |
CN113296883A (zh) * | 2021-02-22 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 应用管理方法和装置 |
US11249961B2 (en) | 2017-06-30 | 2022-02-15 | Microsoft Technology Licensing, Llc | Online schema change of range-partitioned index in a distributed storage system |
US11487734B2 (en) | 2017-06-30 | 2022-11-01 | Microsoft Technology Licensing, Llc | Staging anchor trees for improved concurrency and performance in page range index management |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7697518B1 (en) * | 2006-09-15 | 2010-04-13 | Netlogic Microsystems, Inc. | Integrated search engine devices and methods of updating same using node splitting and merging operations |
CN102722449A (zh) * | 2012-05-24 | 2012-10-10 | 中国科学院计算技术研究所 | 基于SSD的Key-Value型本地存储方法及系统 |
CN103198150A (zh) * | 2013-04-24 | 2013-07-10 | 清华大学 | 一种大数据索引方法及系统 |
CN103403709A (zh) * | 2012-11-15 | 2013-11-20 | 华为技术有限公司 | 一种数据读写的方法、装置和系统 |
CN104142958A (zh) * | 2013-05-10 | 2014-11-12 | 华为技术有限公司 | 一种键值对系统中数据的存储方法和相关装置 |
-
2015
- 2015-05-12 CN CN201510239570.0A patent/CN104809237B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7697518B1 (en) * | 2006-09-15 | 2010-04-13 | Netlogic Microsystems, Inc. | Integrated search engine devices and methods of updating same using node splitting and merging operations |
CN102722449A (zh) * | 2012-05-24 | 2012-10-10 | 中国科学院计算技术研究所 | 基于SSD的Key-Value型本地存储方法及系统 |
CN103403709A (zh) * | 2012-11-15 | 2013-11-20 | 华为技术有限公司 | 一种数据读写的方法、装置和系统 |
CN103198150A (zh) * | 2013-04-24 | 2013-07-10 | 清华大学 | 一种大数据索引方法及系统 |
CN104142958A (zh) * | 2013-05-10 | 2014-11-12 | 华为技术有限公司 | 一种键值对系统中数据的存储方法和相关装置 |
Cited By (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138622B (zh) * | 2015-08-14 | 2018-05-22 | 中国科学院计算技术研究所 | 用于lsm树存储系统的插入操作及负载的读取和合并方法 |
CN105138622A (zh) * | 2015-08-14 | 2015-12-09 | 中国科学院计算技术研究所 | 用于lsm树存储系统的插入操作及负载的读取和合并方法 |
CN106569893B (zh) * | 2015-10-09 | 2021-02-05 | 阿里巴巴集团控股有限公司 | 流量控制方法及设备 |
CN106569893A (zh) * | 2015-10-09 | 2017-04-19 | 阿里巴巴集团控股有限公司 | 流量控制方法及设备 |
CN105487820A (zh) * | 2015-11-30 | 2016-04-13 | 中国科学院信息工程研究所 | 一种基于时间片轮转机制的树状存储结构写放大优化方法 |
CN105487820B (zh) * | 2015-11-30 | 2018-11-16 | 中国科学院信息工程研究所 | 一种基于时间片轮转机制的树状存储结构写放大优化方法 |
CN105512325A (zh) * | 2015-12-21 | 2016-04-20 | 华为技术有限公司 | 多版本数据索引的更新、删除与建立方法及装置 |
CN105512325B (zh) * | 2015-12-21 | 2018-12-25 | 华为技术有限公司 | 多版本数据索引的更新、删除与建立方法及装置 |
CN106599247A (zh) * | 2016-12-19 | 2017-04-26 | 北京奇虎科技有限公司 | LSM‑tree结构中数据文件的合并方法及装置 |
CN106599247B (zh) * | 2016-12-19 | 2020-04-17 | 北京奇虎科技有限公司 | LSM-tree结构中数据文件的合并方法及装置 |
CN106844650A (zh) * | 2017-01-20 | 2017-06-13 | 中国科学院计算技术研究所 | 一种日志合并树的合并方法及系统 |
TWI702503B (zh) * | 2017-02-09 | 2020-08-21 | 美商美光科技公司 | 實施用於維護操作之合併樹修改之系統、方法及電腦可讀媒體 |
WO2018171296A1 (zh) * | 2017-03-22 | 2018-09-27 | 华为技术有限公司 | 一种文件合并方法及控制器 |
US11403021B2 (en) | 2017-03-22 | 2022-08-02 | Huawei Technologies Co., Ltd. | File merging method and controller |
CN107844511A (zh) * | 2017-06-16 | 2018-03-27 | 珠海金山网络游戏科技有限公司 | 一种基于周期成本的游戏资源缓存方法和系统 |
US11487734B2 (en) | 2017-06-30 | 2022-11-01 | Microsoft Technology Licensing, Llc | Staging anchor trees for improved concurrency and performance in page range index management |
US11249961B2 (en) | 2017-06-30 | 2022-02-15 | Microsoft Technology Licensing, Llc | Online schema change of range-partitioned index in a distributed storage system |
CN108021702A (zh) * | 2017-12-26 | 2018-05-11 | 百度在线网络技术(北京)有限公司 | 基于LSM-tree的分级存储方法、装置、OLAP数据库系统及介质 |
CN109240993A (zh) * | 2018-07-24 | 2019-01-18 | 郑州云海信息技术有限公司 | 元数据管理方法以及存储服务器 |
CN109213445A (zh) * | 2018-08-23 | 2019-01-15 | 郑州云海信息技术有限公司 | 一种存储系统元数据的管理方法、管理系统及相关装置 |
CN112236759A (zh) * | 2018-09-14 | 2021-01-15 | 谷歌有限责任公司 | 日志结构合并森林中的交错合并 |
CN109271570A (zh) * | 2018-10-30 | 2019-01-25 | 郑州云海信息技术有限公司 | 一种元数据管理查询的方法 |
CN109521963B (zh) * | 2018-11-14 | 2021-08-10 | 郑州云海信息技术有限公司 | 一种元数据落盘方法及装置 |
CN109521963A (zh) * | 2018-11-14 | 2019-03-26 | 郑州云海信息技术有限公司 | 一种元数据落盘方法及装置 |
CN109614045B (zh) * | 2018-12-06 | 2022-04-15 | 广东浪潮大数据研究有限公司 | 一种元数据落盘方法、装置及相关设备 |
CN109614045A (zh) * | 2018-12-06 | 2019-04-12 | 广东浪潮大数据研究有限公司 | 一种元数据落盘方法、装置及相关设备 |
CN111722785A (zh) * | 2019-03-21 | 2020-09-29 | 阿里巴巴集团控股有限公司 | 一种缓存更新方法和装置 |
CN112015791A (zh) * | 2019-05-30 | 2020-12-01 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置、电子设备及计算机存储介质 |
WO2020238750A1 (zh) * | 2019-05-30 | 2020-12-03 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置、电子设备及计算机存储介质 |
CN110413413A (zh) * | 2019-07-26 | 2019-11-05 | 北京蜜莱坞网络科技有限公司 | 一种数据写入方法、装置、设备及存储介质 |
CN112732191A (zh) * | 2021-01-08 | 2021-04-30 | 苏州浪潮智能科技有限公司 | 基于日志结构合并树合并数据的方法、系统、设备及介质 |
CN112732191B (zh) * | 2021-01-08 | 2023-01-10 | 苏州浪潮智能科技有限公司 | 基于日志结构合并树合并数据的方法、系统、设备及介质 |
CN112954244A (zh) * | 2021-01-19 | 2021-06-11 | 普联技术有限公司 | 监控录像的存储实现方法、装置、设备及存储介质 |
CN113296883A (zh) * | 2021-02-22 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 应用管理方法和装置 |
CN113296883B (zh) * | 2021-02-22 | 2023-08-04 | 阿里巴巴集团控股有限公司 | 应用管理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104809237B (zh) | 2018-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104809237A (zh) | LSM-tree索引的优化方法和装置 | |
CN105630865B (zh) | 用于内存列式存储的n比特压缩版本化列数据阵列 | |
CN107391653B (zh) | 一种分布式NewSQL数据库系统及图片数据储存方法 | |
EP3238106B1 (en) | Compaction policy | |
EP2924594B1 (en) | Data encoding and corresponding data structure in a column-store database | |
CN109558084B (zh) | 一种数据处理方法以及相关设备 | |
CN104021145B (zh) | 一种混合业务并发访问的方法和装置 | |
CN103810237A (zh) | 数据管理方法和系统 | |
US20090254594A1 (en) | Techniques to enhance database performance | |
US10061834B1 (en) | Incremental out-of-place updates for datasets in data stores | |
CN105630864A (zh) | 存储行标识符值的字典的强制排序 | |
CN103164490B (zh) | 一种不固定长度数据的高效存储实现方法和装置 | |
CN102063500A (zh) | 一种数据迁移的方法及装置 | |
CN105117417A (zh) | 一种读优化的内存数据库Trie树索引方法 | |
CN107423422A (zh) | 基于网格的空间数据分布式存储及检索方法和系统 | |
CN103473298B (zh) | 数据归档方法和装置以及存储系统 | |
CN106716409A (zh) | 基于查询需求从行存储数据库自适应地构建和更新列存储数据库的方法和系统 | |
CN104424219B (zh) | 一种数据文件的管理方法及装置 | |
CN105718507A (zh) | 一种数据迁移方法和装置 | |
Petrov | Database Internals: A deep dive into how distributed data systems work | |
CN106326229A (zh) | 一种嵌入式系统的文件存储方法和装置 | |
CN106155934A (zh) | 一种云环境下基于重复数据的缓存方法 | |
CN106156301A (zh) | 一种大字段数据的处理方法及装置 | |
CN108021702A (zh) | 基于LSM-tree的分级存储方法、装置、OLAP数据库系统及介质 | |
CN110096509A (zh) | 大数据环境下实现历史数据拉链表存储建模处理的系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |