CN110825748A - 利用差异化索引机制的高性能和易扩展的键值存储方法 - Google Patents
利用差异化索引机制的高性能和易扩展的键值存储方法 Download PDFInfo
- Publication number
- CN110825748A CN110825748A CN201911072075.XA CN201911072075A CN110825748A CN 110825748 A CN110825748 A CN 110825748A CN 201911072075 A CN201911072075 A CN 201911072075A CN 110825748 A CN110825748 A CN 110825748A
- Authority
- CN
- China
- Prior art keywords
- data
- key value
- layer
- key
- partition
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种利用差异化索引机制的高性能和易扩展的键值存储方法,特征是包括差异化的索引设计、键值数据对的部分分离、基于键值范围的数据动态分区管理和范围查询优化。由于采用两层存储架构并对无序层的热数据建立哈希索引,使得该系统能够充分利用数据的局部性原理来加速对热数据的访问,并保证了较低的索引内存开销和高效的数据查询效率;此外,键值数据对的部分分离存储,极大地提高了合并效率;其次,对不同键值范围的数据进行动态分区管理,实现了键值存储的横向水平扩展,保证在大规模数据存储下也能获得高效的读写性能;最后,设计基于文件数量的合并策略,采用多线程技术并行读取日志文件,且结合预读机制来加速范围查询。
Description
技术领域
本发明属于计算机存储系统技术领域,具体涉及在键值存储(KV Stores)系统中,利用工作负载的局部性来构建差异化的索引机制,并在此基础上结合基于键值范围的数据动态分区管理,实现高性能和易扩展的键值存储方法。
背景技术
据谷歌(Google),脸书(Facebook)等公司介绍,为了适应海量非结构化数据的存储与访问需求,并且克服传统文件存储在可扩展性与性能等方面的不足,键值存储(key-value存储或简称为KV存储)提供了很好的解决方案,并已被广泛采用,比如亚马逊公司的Dynamo,百度公司的Atlas及谷歌公司的LevelDB等键值存储系统。以上主流的键值存储系统都采用日志结构合并树(LSM-Tree)来管理键值数据对(key-value pairs),该架构将键值数据对组织成多层形式,并且需要对相邻层间的数据做频繁的合并操作,由此造成严重的读写放大问题,在大规模数据存储下尤为严重。此外,后续的研究工作,如脸书(Facebook)公司的RocksDB,德克萨斯大学奥斯汀分校的PebblesDB等主要基于日志结构合并树结构来优化其写性能,但不同程度牺牲了读性能,且均未利用工作负载的局部性来提升系统性能。然而,随着数据规模的急剧增长,对键值存储系统的可扩展性提出较高要求,并且企业应用中的绝大多数工作负载都是读写混合的。因此,为了能够很好地适应应用的发展需求,需要键值存储系统在大规模数据存储下也能同时具备高效的读写性能。
发明内容
本发明的目的是提出一种利用差异化索引机制的高性能和易扩展的键值存储方法,以克服现有技术不能同时提升读写性能及不能在大规模数据存储下保证高效的整体性能的缺陷,从而实现键值存储系统在大规模数据存储场景下也能同时获得高效的读写性能。
本发明利用差异化索引机制设计高性能和易扩展的键值存储方法,其特征在于包括以下步骤:
第一步:进行差异化的索引设计
对于最近从内存写入磁盘的数据,会被频繁访问,将其视为热数据,其他数据则视为冷数据;之后对冷热数据进行分层组织和存储,并为其建立差异化的索引机制,具体为:最近从内存写入磁盘的数据存储在无序层,并在内存中为其设计和维护哈希索引,以记录热数据的存储位置;对于绝大部分很少被访问的冷数据,采用单层日志结构合并树(LSM-Tree)架构将其以全局有序的形式存储在有序层;
第二步:键值数据对的部分分离
限制无序层的数据量上限为UnsortedLimit,当超过该上限时,则对无序层的数据进行合并操作,将其合并到有序层;对无序层的数据保持键值数据对,对有序层的数据采用数据对的键和值分离存储的方式,仅仅将数据对的键(keys)存储在有序层,数据对的值(values)存储在单独的日志文件,合并操作时仅仅只需对有序层的键(keys)合并;
第三步:基于键值范围的数据动态分区管理
基于键值范围的数据动态分区策略(Dynamic range partitioning),将不同键值范围的数据映射到不同的分区,对不同分区的数据进行独立的合并操作,垃圾回收操作和管理;
基于键值范围的动态分区策略的工作流程如下:设定数据分区的数据量上限为PartitionSizeLimit,初始时,所有数据写入一个分区P0,当P0的数据量超过上限时,对其进行分割操作,将其包含的所有数据根据键值范围划分为相等的两部分,形成两个新的分区P1和P2,并记录两个分区的边界键值(boundary key)K2,即分区P2的最小键值;
对于后续写入的数据,首先将其与边界键值(boundary key)K2进行比较,若其键值小于K2,则写入分区P1,若其键值大于K2,则写入分区P2;当分区P1和P2的数据量超过上限PartitionSizeLimit时,对其进行与上述相同的分割操作,并记录边界键值;随着写入数据量的逐渐增加,把所有数据按照与上述相同的分割操作分割形成若干分区,所有分区的边界键值作为定位数据所在分区的索引;
第四步:范围查询优化
首先,通过比较各个分区的边界键值,定位要扫描数据所在的分区,然后对于无序层和有序层的数据,采用不同的策略分别进行优化:1)对于无序层的数据,提出基于文件数量的合并策略,当无序层的文件数超过设定的阈值时,将所有文件合并成一个有序文件;2)对于有序层的数据,由于数据对的键和值分开存储,导致大量随机I/O,利用固态硬盘高效的并行I/O特性,采用多线程并行读取日志文件中的值,并且利用预读机制(read-ahead)将日志文件中的值预取到操作系统的页缓存(page cache);
第五步:数据的一致性保证
1)对于内存的键值数据对,采用键值存储系统普遍采用的先写日志机制(WAL),并增加存储边界键值和分区编号等元数据;
2)对于内存中建立的哈希索引,设计检查点(checkpoint)技术定期将哈希索引持久化到磁盘文件,以较低的开销保障其一致性;
3)对于日志文件的垃圾回收状态,如果在做垃圾回收操作时系统崩溃,需要保证数据的有效性,采用为完成垃圾回收操作的日志文件添加标签,表明其已完成垃圾回收操作,空间可以被回收。
上述本发明利用差异化索引机制的高性能和易扩展的键值存储方法,其主要操作步骤包括:进行差异化的索引设计、键值数据对的部分分离、基于键值范围的数据动态分区管理、范围查询优化和数据的一致性保证。由于采用两层存储架构并对无序层的热数据建立哈希索引,使得该系统能够充分利用数据的局部性原理加速对热数据的访问,同时由于设计无序层和有序层组成的两层存储架构,有效地保证了较低的索引内存开销,高效的数据查询效率和较好的范围查询性能;此外,通过设计键值数据对的部分分离,对无序层的数据维持键值数据对,对有序层的数据对采用键和值分离存储,从而使得在合并操作时避免了有序层中大量数据被读写,极大地提高了合并效率;另外,对不同键值范围的数据进行动态分区管理,使不同键值范围的数据相互独立,从而实现键值存储系统的横向水平扩展,很好的支持可扩展性,保证在大规模数据存储下也能获得高效的读写性能;其次,设计基于文件数量的合并策略,并利用固态硬盘良好的并行I/O特性,采用多线程技术并行读取日志文件,且结合预读机制来加速范围查询;最后,分别采用先写日志机制,检查点技术和添加标签机制来保证内存中的键值数据对,哈希索引和日志文件中数据的一致性和可靠性。因此,本发明通过上述设计克服了已有键值存储系统的读写放大严重,可扩展性较差等缺点,通过设计索引机制和数据动态分区管理,极大地降低了读写放大现象,并且使得键值存储系统在大规模数据存储下也能保证高效的读写性能,从而具备良好的可扩展性。
附图说明
图1是利用差异化索引机制的高性能和易扩展的键值存储方法的整体架构图;
图2为哈希索引设计和无序层的数据组织示意图;
图3为键值数据对的部分分离示意图;
图4表示基于键值范围的数据动态分区管理示意图;
图5表示数据的一致性保证示意图。
具体实施方式
下面结合附图通过具体实施例对本发明-利用差异化索引机制的高性能和易扩展的键值存储方法作进一步的详细说明。
实施例1:
本实施例通过操作实际的键值数据对(key-value pairs)来说明本发明的详细运行流程和工作方式,系统相关参数设置如下:每个分区存储的容量为40GB,且在每个分区中,哈希索引的无序层的数据量上限为4GB。首先向发明的键值存储系统中随机写入总量为100GB~1000GB的键值数据对,然后分别向写入数据的存储系统发出10M~100M条随机读请求。应用初始时,键值存储系统为空,所有数据写入一个分区。附图1给出了本实施例利用差异化索引机制的高性能和易扩展的键值存储方法的架构示意图,包括基于哈希索引的差异化索引设计、键值数据对的部分分离和基于键值范围的数据动态分区管理。
本实施例利用差异化索引机制的高性能和易扩展的键值存储方法,具体包括以下步骤:
第一步:进行差异化的索引设计
对于键值数据对<key,value>,首先写入磁盘的日志文件,以保证内存数据的可靠性;然后写入内存的缓存(MemTable),当缓存(MemTable)存满之后,将其转换为锁定的缓存(Immutable MemTable),等待后台线程将其写入磁盘,形成磁盘上的文件;对于最近从内存写入磁盘的数据,在最近一段时间会被频繁访问,因此可将其视为热数据,对于剩余的其他数据,可视为冷数据。对冷热数据进行分层组织和存储,并为其建立差异化的索引机制:为了加速对热数据的访问,将热数据单独存储在无序层,并为其建立哈希索引,以记录热数据的存储位置,实现快速查找。对于其他数据,为节约索引的内存开销并保证范围查询性能,采用单层日志结构合并树(LSM-Tree)架构将其以全局有序的形式存储在有序层,因此可通过二分折半查找快速定位数据所在的位置。
附图2给出了本实施例中哈希索引的详细设计和无序层数据的组织结构。在内存中维护一个基于两层哈希的轻量级哈希索引,其结合布谷哈希(cuckoo hash)和链式哈希(linked hash)来解决哈希冲突,主要功能是根据数据对的键值key能快速映射到数据所在的文件编号。如图2所示,哈希索引主要由N个桶组成,每个桶上存储一个由若干索引实体组成的链表。每个索引实体包含三个属性域<键值标签,文件编号,指针>,其中,键值标签用来记录键值的特征信息,存储的是键值Key的哈希值hn+1(Key)的前两个字节;文件编号记录键值数据对所在的磁盘文件编号,使用2字节来记录文件编号;指针(pointer)用来指向该桶上的下一个索引实体,占据4字节的存储空间。当向无序层写入一个键值为Key的数据对后,需要在哈希索引中为其构建一个索引实体以记录其位置信息,首先使用布谷哈希,如(h1,h2,…,hn)(Key)%N,为其分配一个空桶,如果没有找到空桶,则生成一个索引实体并将其追加到桶hn(Key)%N后面。之后,将键值标签和文件编号记录到选择的索引实体中。
当查找一个键值为Key的键值数据对时,首先通过哈希函数hn+1(Key)计算出键值Key的键值标签,即hn+1(Key)的前两个字节。然后,从桶hn(Key)开始,到桶h1(Key)结束,依次搜索每个桶,直到找到查找的键值数据对。其中,对于每个桶的搜索,由于最新的索引实体总是追加到桶的尾部,因此,从尾部的索引实体开始依次匹配每个索引实体的键值标签。一旦匹配到键值标签相同,则根据索引实体中记录的文件编号到磁盘上的相应文件中查找数据对,若在文件中找到相应数据对,则结束并返回,否则继续搜索后续索引实体和后续桶。最后,如果在无序层中没有找到查询的键值数据对,则通过二分折半查找方法继续在有序层中查找。
第二步:键值数据对的部分分离存储
为了限制哈希索引的内存开销并保证高效的范围查询,限制哈希索引的无序层的数据量上限UnsortedLimit为4GB,当超过该上限时,对无序层的数据进行合并操作,将其合并到有序层。为了减少合并过程中数据被频繁读写,从而提高合并效率,采用键值数据对的部分分离存储。
附图3给出了本实施例中键值数据对的部分分离存储。最上层的线框包含的数据表示拥有哈希索引的无序层数据,这类数据直接从内存以追加的形式批量写入磁盘,最小写入单位为文件,导致不同文件间的键值范围有重叠。并且,由于其最近从内存写入,相比于其他数据,这部分数据会被频繁访问。因此,本发明在内存中为其构建哈希索引以加速对这部分热数据的访问。此外,为了保证较小的内存索引开销和较好的范围查询性能,当无序层的数据量超过上限(UnsortedLimit=4GB)时,将无序层数据合并到有序层,如图3最下层的实线框所示。为了避免合并过程中有序层的大量数据被频繁读写,从而严重影响系统的写入性能,本发明设计键值数据对的部分分离存储:对无序层的数据保持键值数据对,对有序层的数据采用数据对的键和值分离存储的方式,如图3最下层的实线框所示。具体流程为:当将无序层的数据合并到有序层时,只对键值(keys)进行批量合并,数据值(values)以追加的形式存储到分离的日志文件中,并将数据值(values)的位置信息记录在指针(pointer)中,和相应键值(keys)存储在一起。该设计的主要优点是:无序层的数据可视为热数据,采用键值数据对的形式存储可以保证高效的读性能;有序层的数据在做合并操作时需要被读取到内存,执行合并后再写回磁盘,导致大量的I/O开销,本设计把键值(keys)存储在有序层,数据值(values)存储在单独的日志文件中,合并操作时只需对有序层的键值(keys)合并,无需合并数据值(values),从而极大地减少了合并操作导致的磁盘读写I/O,保证了高效的合并效率。
第三步:基于键值范围的数据动态分区管理
随着数据量急剧增长,传统的基于日志结构合并树(LSM-tree)的键值存储系统通过增加更多的层数来支持大规模的数据存储,然而,随着写入数据的增加,这种方式将触发频繁的合并操作,将数据从最低层合并到最高层,并且造成查询操作需要访问多层数据,进而极大地影响系统的读写性能。此外,在大规模数据存储下,日志文件的垃圾回收操作(GCoperation)也将成为系统性能的瓶颈。因此,我们设计基于键值范围的数据动态分区管理(Dynamic range partitioning),将不同键值范围的数据映射到不同的分区,对不同分区的数据进行独立的合并操作,垃圾回收操作和管理,从而在大规模的数据存储下也能保证高效的读写性能。
附图4给出了本实施例中基于键值范围的数据动态分区管理,初始时,所有数据写入一个分区P0,当分区P0的数据量超过分区容量上限(PartitionSizeLimit=40GB)时,对其进行分割操作,具体流程为:①首先分割无序层和有序层的键值(keys),具体操作为:开始将内存的所有键值数据对写入无序层,然后读取无序层和有序层中的所有文件,对键值(keys)进行合并和排序,并删除无效的键值;之后将排好序的键值(keys)根据键值范围均匀地划分为两部分,并记录这两部分的边界键值K作为分割基点,键值小于K的数据划分到分区P1,键值大于等于K的数据划分到分区P2;其次,根据边界键值K将无序层中的数据值(values)划分为两部分,并且以追加的方式写入相应分区中新建的日志文件;最后,将数据值(values)在日志文件中的存储位置记录在指针中,并和相应的键值(keys)存储在一起,最后写回有序层。
②分割有序层的日志文件中的数据值(values),由于这部分数据值(values)单独存储在多个日志文件中,本发明设计延迟分割机制:后台线程对日志文件做垃圾回收操作(GC operation)的同时对日志文件中的数据值(values)进行分割。工作流程如下:分区P1中的垃圾回收操作线程首先扫描分区P1的有序层中的所有文件,然后根据文件中的指针(pointer)从分区P1和P2共享的日志文件中读取有效的数据值(values),然后将这些有效数据值(values)写回分区P1中新建的日志文件,最后更新有序层中键值(keys)对应的指针来记录数据值(values)的最新位置。分区P2中的垃圾回收线程执行流程和分区P1类似,不再累述。延迟分割的主要好处是通过将分割操作合并到垃圾回收操作中,可以有效避免大量的磁盘I/O操作,从而显著地减少分割开销。③分割完成后,产生两个新的分区P1和P2,其中每个分区拥有自己专属的哈希索引的无序层,有序层和日志文件,如图4的下半部分所示。一旦分区的数据量超过容量上限,将触发分割操作,分割操作完成后,所产生的两个分区的数据,其键值范围互不重叠,因此可在不同分区上进行独立的合并,分割和垃圾回收操作,从而大大提高合并,分割和垃圾回收操作的效率,并保证键值存储系统良好的整体性能和可扩展性。
需要强调的是,随着数据量的增加,最初的一个分区将会分割产生多个分区,为了在读写操作时能够快速定位数据所在的分区,本发明在内存中和磁盘上记录所有分区的编号和边界键值,用作快速定位分区的索引信息。此外,不同分区管理不同键值范围的键值数据对,因此不同分区的键值范围没有重叠,每个键值数据对只会存在于一个分区,所以,当查找一个键值数据对时,首先将其键值同各个分区的边界键值进行比较,获得其所在的分区编号,然后在对应分区中查找数据。总之,基于键值范围的数据动态分区管理可以将不同键值范围的数据分割存储在不同的独立分区,并保持每个分区两层的存储架构,从而高效地实现键值存储的横向水平扩展,保证在大规模的数据存储下也能获得高效的读写性能和范围扫描性能。
第四步:范围查询优化
本实施例对范围查询的优化体现在两个层面,第一个层面:首先通过比较各个分区的边界键值,定位要扫描数据所在的分区,从而极大地减少要扫描的数据量。第二个层面:对于定位的分区中的无序层和有序层,采用不同的策略进行优化:1)对于无序层,由于该层的文件以追加的形式写入,因此文件间的键值范围有重叠,导致范围扫描时需要依次检查每个文件,进而导致大量的随机I/O读写。本发明提出基于文件数量的合并策略,当无序层的文件数超过设定的阈值时,将所有文件合并成一个有序文件。2)对于有序层,由于该层的数据对采用键(keys)和值(values)分开存储,导致范围扫描时触发大量随机I/O,本实例利用固态硬盘高效的并行I/O特性,采用多线程并行读取日志文件中的数据值,并利用预读机制(read-ahead)将日志文件中的数据值预取到操作系统的页缓存(page cache),从而加速范围扫描操作。
第五步:数据的一致性保证
本实例主要从以下三方面提供数据一致性保证:(1)缓存在内存的键值数据对;(2)内存的哈希索引;(3)日志文件的垃圾回收状态。
1)对于内存的键值数据对,采用键值存储系统普遍采用的先写日志机制(WAL)保证内存数据的一致性和可靠性,具体实施方法为:为每个分区分配一个日志文件(Log),向每个分区写入数据之前,先写日志文件(Log),以保证每个分区数据的可靠性。如图5左侧所示,对分区P0,P1,…,Pn,为每个分区分配一个日志文件(Log),从而在磁盘上形成日志文件Log0,Log1,…,Logn。当需要恢复数据时,每个分区从其对应的日志文件(Log)中进行恢复。
2)对于内存中建立的哈希索引,设计检查点(checkpoint)技术定期将哈希索引持久化到磁盘文件,以较低的开销保障其一致性。具体做法为:对于哈希索引,每当从内存写入磁盘的数据超过无序层容量限制的一半时,将内存的哈希索引持久化到磁盘上的哈希索引文件,如图5右侧所示。重建哈希索引只需读取哈希索引文件中的数据并扫描从上次持久化后新写入的数据。
3)对于日志文件的垃圾回收状态,如果在做垃圾回收操作时系统崩溃,需要保证数据的有效性,设计标签机制来确保日志文件的有效性。具体做法为:当对有序层中的日志文件完成垃圾回收操作后,为这些日志文件添加可以回收的标签(GC_done),后台线程在回收磁盘空间时,首先扫描日志文件的标签,如果标签为可回收,则删除该日志文件,回收相应的存储空间,否则继续扫描其他日志文件。
在本实施例中,通过利用差异化索引机制设计高性能和易扩展的键值存储方法,相比于其他键值存储方法而言,本发明可以获得更好的读写性能和可扩展性。此外,基于哈希索引的差异化索引加速了热数据的访问效率;键值数据对的部分分离存储有效减少了数据合并操作导致的额外I/O开销,提高了合并效率;基于键值范围的数据动态分区管理有效地支持系统的可扩展性,并在大规模的数据存储下也能保证高效的读写性能和范围查询性能。
Claims (1)
1.一种利用差异化索引机制的高性能和易扩展的键值存储方法,其特征在于包括以下步骤:
第一步:进行差异化的索引设计
对于最近从内存写入磁盘的数据,会被频繁访问,将其视为热数据,其他数据则视为冷数据;之后对冷热数据进行分层组织和存储,并为其建立差异化的索引机制,具体为:最近从内存写入磁盘的数据存储在无序层,并在内存中为其设计和维护哈希索引,以记录热数据的存储位置;对于绝大部分很少被访问的冷数据,采用单层日志结构合并树架构将其以全局有序的形式存储在有序层;
第二步:键值数据对的部分分离
限制无序层的数据量上限为UnsortedLimit,当超过该上限时,则对无序层的数据进行合并操作,将其合并到有序层;对无序层的数据保持键值数据对,对有序层的数据采用数据对的键和值分离存储的方式,仅仅将数据对的键存储在有序层,数据对的值存储在单独的日志文件,合并操作时仅仅只需对有序层的键合并;
第三步:基于键值范围的数据动态分区管理
基于键值范围的数据动态分区策略,将不同键值范围的数据映射到不同的分区,对不同分区的数据进行独立的合并操作,垃圾回收操作和管理;
基于键值范围的动态分区策略的工作流程如下:设定数据分区的数据量上限为PartitionSizeLimit,初始时,所有数据写入一个分区P0,当P0的数据量超过上限时,对其进行分割操作,将其包含的所有数据根据键值范围划分为相等的两部分,形成两个新的分区P1和P2,并记录两个分区的边界键值K2,即分区P2的最小键值;
对于后续写入的数据,首先将其与边界键值K2进行比较,若其键值小于K2,则写入分区P1,若其键值大于K2,则写入分区P2;当分区P1和P2的数据量超过上限PartitionSizeLimit时,对其进行与上述相同的分割操作,并记录边界键值;随着写入数据量的逐渐增加,把所有数据按照与上述相同的分割操作分割形成若干分区,所有分区的边界键值作为定位数据所在分区的索引;
第四步:范围查询优化
首先,通过比较各个分区的边界键值,定位要扫描数据所在的分区,然后对于无序层和有序层的数据,采用不同的策略分别进行优化:1)对于无序层的数据,提出基于文件数量的合并策略,当无序层的文件数超过设定的阈值时,将所有文件合并成一个有序文件;2)对于有序层的数据,由于数据对的键和值分开存储,导致大量随机I/O,利用固态硬盘高效的并行I/O特性,采用多线程并行读取日志文件中的值,并且利用预读机制将日志文件中的值预取到操作系统的页缓存;
第五步:数据的一致性保证
1)对于内存的键值数据对,采用键值存储系统普遍采用的先写日志机制,并增加存储边界键值和分区编号等元数据;
2)对于内存中建立的哈希索引,设计检查点技术定期将哈希索引持久化到磁盘文件,以较低的开销保障其一致性;
3)对于日志文件的垃圾回收状态,如果在做垃圾回收操作时系统崩溃,需要保证数据的有效性,采用为完成垃圾回收操作的日志文件添加标签,表明其已完成垃圾回收操作,空间可以被回收。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911072075.XA CN110825748B (zh) | 2019-11-05 | 2019-11-05 | 利用差异化索引机制的高性能和易扩展的键值存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911072075.XA CN110825748B (zh) | 2019-11-05 | 2019-11-05 | 利用差异化索引机制的高性能和易扩展的键值存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110825748A true CN110825748A (zh) | 2020-02-21 |
CN110825748B CN110825748B (zh) | 2023-05-16 |
Family
ID=69552561
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911072075.XA Active CN110825748B (zh) | 2019-11-05 | 2019-11-05 | 利用差异化索引机制的高性能和易扩展的键值存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110825748B (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111399777A (zh) * | 2020-03-16 | 2020-07-10 | 北京平凯星辰科技发展有限公司 | 一种基于数据值分类的差异化键值数据存储方法 |
CN111581218A (zh) * | 2020-05-14 | 2020-08-25 | 天津理工大学 | 一种利用双粒度加速访问基于日志结构合并树的键值数据存储的方法 |
CN113535711A (zh) * | 2021-03-23 | 2021-10-22 | 中国科学技术大学 | 一种基于LSM-Tree的分层索引数据管理方法及系统 |
CN113553476A (zh) * | 2021-07-27 | 2021-10-26 | 南京邮电大学 | 一种利用哈希减少写停顿的键值存储方法 |
CN113626431A (zh) * | 2021-07-28 | 2021-11-09 | 浪潮云信息技术股份公司 | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统 |
CN114077609A (zh) * | 2022-01-19 | 2022-02-22 | 北京四维纵横数据技术有限公司 | 数据存储及检索方法,装置,计算机可读存储介质及电子设备 |
CN114564446A (zh) * | 2022-03-01 | 2022-05-31 | 清华大学 | 一种文件存储的方法、装置、系统及存储介质 |
CN114942908A (zh) * | 2022-07-19 | 2022-08-26 | 阿里巴巴(中国)有限公司 | 索引系统、数据处理方法、电子设备及介质 |
US11537582B2 (en) | 2021-04-16 | 2022-12-27 | Samsung Electronics Co., Ltd. | Data access method, a data access control device, and a data access system |
KR102512571B1 (ko) * | 2021-12-06 | 2023-03-22 | 성균관대학교산학협력단 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
CN115878321A (zh) * | 2022-12-14 | 2023-03-31 | 成都信息工程大学 | 一种基于gpu加速的文件搜索方法 |
CN116894041A (zh) * | 2023-09-06 | 2023-10-17 | 北京四维纵横数据技术有限公司 | 数据存储方法、装置、计算机设备及介质 |
CN116910310A (zh) * | 2023-06-16 | 2023-10-20 | 广东电网有限责任公司佛山供电局 | 一种基于分布式数据库的非结构化数据存储方法及装置 |
CN117973812A (zh) * | 2024-03-29 | 2024-05-03 | 北京卓导科技有限公司 | 一种基于大数据的企业信息化管理平台及方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100281013A1 (en) * | 2009-04-30 | 2010-11-04 | Hewlett-Packard Development Company, L.P. | Adaptive merging in database indexes |
WO2015109250A1 (en) * | 2014-01-20 | 2015-07-23 | Alibaba Group Holding Limited | CREATING NoSQL DATABASE INDEX FOR SEMI-STRUCTURED DATA |
CN108776698A (zh) * | 2018-06-08 | 2018-11-09 | 湖南大学 | 一种基于Spark的抗偏斜的数据分片方法 |
CN109871367A (zh) * | 2019-02-28 | 2019-06-11 | 江苏实达迪美数据处理有限公司 | 一种基于Redis和HBase的分布式冷热数据分离方法 |
CN110389942A (zh) * | 2019-06-21 | 2019-10-29 | 华中科技大学 | 一种无垃圾回收的键值分离存储方法和系统 |
-
2019
- 2019-11-05 CN CN201911072075.XA patent/CN110825748B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100281013A1 (en) * | 2009-04-30 | 2010-11-04 | Hewlett-Packard Development Company, L.P. | Adaptive merging in database indexes |
WO2015109250A1 (en) * | 2014-01-20 | 2015-07-23 | Alibaba Group Holding Limited | CREATING NoSQL DATABASE INDEX FOR SEMI-STRUCTURED DATA |
CN108776698A (zh) * | 2018-06-08 | 2018-11-09 | 湖南大学 | 一种基于Spark的抗偏斜的数据分片方法 |
CN109871367A (zh) * | 2019-02-28 | 2019-06-11 | 江苏实达迪美数据处理有限公司 | 一种基于Redis和HBase的分布式冷热数据分离方法 |
CN110389942A (zh) * | 2019-06-21 | 2019-10-29 | 华中科技大学 | 一种无垃圾回收的键值分离存储方法和系统 |
Non-Patent Citations (4)
Title |
---|
JUAN LI ETC.: "Review on HDD-Based, SSD-Based and Hybrid Key-Value Stores" * |
JUSTIN J. LEVANDOSKI ETC.: "Identifying hot and cold data in main-memory databases" * |
唐颢: "Ceph存储引擎中基于固态盘的日志机制优化" * |
游理通 等: "一个基于日志结构的非易失性内存键值存储系统" * |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111399777A (zh) * | 2020-03-16 | 2020-07-10 | 北京平凯星辰科技发展有限公司 | 一种基于数据值分类的差异化键值数据存储方法 |
CN111399777B (zh) * | 2020-03-16 | 2023-05-16 | 平凯星辰(北京)科技有限公司 | 一种基于数据值分类的差异化键值数据存储方法 |
CN111581218A (zh) * | 2020-05-14 | 2020-08-25 | 天津理工大学 | 一种利用双粒度加速访问基于日志结构合并树的键值数据存储的方法 |
CN113535711A (zh) * | 2021-03-23 | 2021-10-22 | 中国科学技术大学 | 一种基于LSM-Tree的分层索引数据管理方法及系统 |
CN113535711B (zh) * | 2021-03-23 | 2024-05-17 | 中国科学技术大学 | 一种基于LSM-Tree的分层索引数据管理方法及系统 |
US11537582B2 (en) | 2021-04-16 | 2022-12-27 | Samsung Electronics Co., Ltd. | Data access method, a data access control device, and a data access system |
CN113553476B (zh) * | 2021-07-27 | 2023-05-26 | 南京邮电大学 | 一种利用哈希减少写停顿的键值存储方法 |
CN113553476A (zh) * | 2021-07-27 | 2021-10-26 | 南京邮电大学 | 一种利用哈希减少写停顿的键值存储方法 |
CN113626431A (zh) * | 2021-07-28 | 2021-11-09 | 浪潮云信息技术股份公司 | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统 |
KR102512571B1 (ko) * | 2021-12-06 | 2023-03-22 | 성균관대학교산학협력단 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
CN114077609A (zh) * | 2022-01-19 | 2022-02-22 | 北京四维纵横数据技术有限公司 | 数据存储及检索方法,装置,计算机可读存储介质及电子设备 |
CN114077609B (zh) * | 2022-01-19 | 2022-04-22 | 北京四维纵横数据技术有限公司 | 数据存储及检索方法,装置,计算机可读存储介质及电子设备 |
CN114564446B (zh) * | 2022-03-01 | 2022-12-27 | 清华大学 | 一种文件存储的方法、装置、系统及存储介质 |
CN114564446A (zh) * | 2022-03-01 | 2022-05-31 | 清华大学 | 一种文件存储的方法、装置、系统及存储介质 |
CN114942908B (zh) * | 2022-07-19 | 2023-01-17 | 阿里巴巴(中国)有限公司 | 索引系统、数据处理方法、电子设备及介质 |
CN114942908A (zh) * | 2022-07-19 | 2022-08-26 | 阿里巴巴(中国)有限公司 | 索引系统、数据处理方法、电子设备及介质 |
CN115878321A (zh) * | 2022-12-14 | 2023-03-31 | 成都信息工程大学 | 一种基于gpu加速的文件搜索方法 |
CN115878321B (zh) * | 2022-12-14 | 2023-11-10 | 成都信息工程大学 | 一种基于gpu加速的文件搜索方法 |
CN116910310A (zh) * | 2023-06-16 | 2023-10-20 | 广东电网有限责任公司佛山供电局 | 一种基于分布式数据库的非结构化数据存储方法及装置 |
CN116910310B (zh) * | 2023-06-16 | 2024-02-13 | 广东电网有限责任公司佛山供电局 | 一种基于分布式数据库的非结构化数据存储方法及装置 |
CN116894041A (zh) * | 2023-09-06 | 2023-10-17 | 北京四维纵横数据技术有限公司 | 数据存储方法、装置、计算机设备及介质 |
CN116894041B (zh) * | 2023-09-06 | 2023-11-17 | 北京四维纵横数据技术有限公司 | 数据存储方法、装置、计算机设备及介质 |
CN117973812A (zh) * | 2024-03-29 | 2024-05-03 | 北京卓导科技有限公司 | 一种基于大数据的企业信息化管理平台及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110825748B (zh) | 2023-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
US9449005B2 (en) | Metadata storage system and management method for cluster file system | |
US9043334B2 (en) | Method and system for accessing files on a storage system | |
US20170212680A1 (en) | Adaptive prefix tree based order partitioned data storage system | |
CN105912687B (zh) | 海量分布式数据库存储单元 | |
CN110058822B (zh) | 一种磁盘阵列横向拓展方法 | |
WO2014015828A1 (zh) | 数据存储空间的处理方法、处理系统及数据存储服务器 | |
CN105677826A (zh) | 一种针对海量非结构化数据的资源管理方法 | |
US9996557B2 (en) | Database storage system based on optical disk and method using the system | |
WO2013174305A1 (zh) | 基于SSD的Key-Value型本地存储方法及系统 | |
CN111026329B (zh) | 基于主机管理瓦记录磁盘的键值存储系统及数据处理方法 | |
US10521117B2 (en) | Unified table delta dictionary memory size and load time optimization | |
CN113626431A (zh) | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统 | |
US9189408B1 (en) | System and method of offline annotation of future accesses for improving performance of backup storage system | |
CN110309233A (zh) | 数据存储的方法、装置、服务器和存储介质 | |
Sarwat et al. | Generic and efficient framework for search trees on flash memory storage systems | |
Amur et al. | Design of a write-optimized data store | |
CN109407985B (zh) | 一种数据管理的方法以及相关装置 | |
CN113821171A (zh) | 一种基于哈希表与lsm树的键值存储方法 | |
Zhang et al. | Nvlsm: A persistent memory key-value store using log-structured merge tree with accumulative compaction | |
CN103942301A (zh) | 一种面向多数据类型访问应用的分布式文件系统 | |
Li et al. | Sinekv: Decoupled secondary indexing for lsm-based key-value stores | |
CN111984604B (zh) | 一种减少日志结构文件系统碎片的方法及闪存存储系统 | |
CN107273443B (zh) | 一种基于大数据模型元数据的混合索引方法 | |
CN109213760B (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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20210112 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 |