CN116204130A - 一种键值存储系统和键值存储系统的管理方法 - Google Patents
一种键值存储系统和键值存储系统的管理方法 Download PDFInfo
- Publication number
- CN116204130A CN116204130A CN202310206733.XA CN202310206733A CN116204130A CN 116204130 A CN116204130 A CN 116204130A CN 202310206733 A CN202310206733 A CN 202310206733A CN 116204130 A CN116204130 A CN 116204130A
- Authority
- CN
- China
- Prior art keywords
- key
- sub
- key value
- bucket
- value pair
- 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.)
- Pending
Links
Images
Classifications
-
- 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
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种键值存储系统和键值存储系统的管理方法,所述系统包括:若干分桶,各所述分桶分别对应不同的键区间,各所述分桶允许分裂和/或合并,每一所述分桶用于存储对应的所述键区间的键值对;每一所述分桶包括内存缓冲区和磁盘文件,所述内存缓冲区用于接收新的键值对,所述磁盘文件用于保存基于所述内存缓冲区写入的有序键值对列表。本发明利用分桶排序的原理构建键值存储系统,将键空间分成多个分区进行管理,有利于在分桶中执行高效的复杂操作,比如对分桶中所有键值对进行排序,从而限制写放大倍数、制定更好的读感知压缩安排以及提高读取性能。克服了现有技术中基于LSM树构建的键值存储系统的写放大倍数过高的缺点。
Description
技术领域
本发明涉及键值存储领域,尤其涉及的是一种键值存储系统和键值存储系统的管理方法。
背景技术
键值存储系统也称为键值数据库,可以定义为非关系型的简单数据库,使用关联数组作为底层数据模型。在大多数情况下,键值存储在性能和速度方面提供了更好的改进。键值存储允许水平扩展,这是其他类型的数据库无法实现的,也是高度可分区的。为了能够通过键精确快速地定位值,键值存储使用紧凑高效的索引结构,特别适用于需要连续查找和检索数据的应用场景。
LSM树全称是日志结构合并树(LogStructMergeTree),如图2所示,它是目前键值存储系统广泛采用的存储结构。LSM树的思想是使用顺序写代替随机写来提高写性能,与此同时会略微降低读性能。LSM树的高速写入能力与读缓存技术带来的高速读能力结合受到了需要处理大规模数据的开发者的青睐。在执行写操作时,首先写入激活的内存表(ActiveMemTable)和预写日志(WriteAheadLogging,WAL)。内存表(MemoryTable,简称MemTable)是一种内存中的数据结构,它保存了落盘之前的数据。跳表(SkipList)是最流行的内存表实现方式。当激活的内存表写满后会被转换为不变的内存表(ImmutableMemTable),并创建一个新的空的激活内存表。后台线程会将不变的内存表写入到磁盘中形成一个新的有序字符串表(SSTable)文件,并随后销毁不可变的内存表。有序字符串表(Sorted StringTable,简称SSTable)是LSM树在磁盘中持久化存储的数据结构,是一个有序的键值对文件。LSM树不会修改已存在的SSTable,而是直接在MemTable中写入新版本的数据,并等待MemTable落盘形成新的SSTable。因此,虽然在同一个SSTable中key不会重复,但是不同的SSTable中仍会存在相同的key。在执行读操作时,由于最新的数据总是先写入MemTable,所以在读取数据时首先要读取MemTable,然后从新到旧搜索SSTable,这样可以保证找到的第一个版本就是该key的最新版本。根据局部性原理,刚写入的数据很有可能被马上读取。因此,MemTable在充当写缓存之外也是一个有效的读缓存。读取过程中需要查询多个SSTable文件,因此理论上LSM树的读取效率低于使用B树的数据库。为了提高读取效率,RocksDB中内置了块缓存(BlockCache),将频繁访问磁盘块缓存在内存中。而LevelDB内置了块缓存和表缓存来缓存热点数据块和SSTable。随着不断写入的SSTable数量越来越多,数据库持有的文件句柄会越来越多,读取数据时需要搜索的SSTable也会越来越多。另一方面对于某个key而言只有最新版本的数据是有效的,其它记录都是在白白浪费磁盘空间。因此对SSTable进行合并和压缩就十分重要。压缩策略需要在读放大、写放大以及空间放大三种负面效应之间进行权衡以适配具体应用场景。
现有基于LSM树的键值存储系统中,写放大倍数过高仍然是一个比较严重的性能瓶颈问题。该问题使得LSM树的压缩合并速度越来越慢。
因此,现有技术还有待改进和发展。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种键值存储系统和键值存储系统的管理方法,旨在解决现有技术中基于LSM树构建的键值存储系统的写放大倍数过高的问题。
本发明解决问题所采用的技术方案如下:
第一方面,本发明实施例提供一种键值存储系统,其中,所述系统包括:
若干分桶,各所述分桶分别对应不同的键区间,各所述分桶允许分裂和/或合并,每一所述分桶用于存储对应的所述键区间的键值对;
每一所述分桶包括内存缓冲区和磁盘文件,所述内存缓冲区用于接收新的键值对,所述磁盘文件用于保存基于所述内存缓冲区写入的有序键值对列表。
在一种实施方式中,所述内存缓冲区基于哈希表构建,所述哈希表包括若干条目,每一所述条目包括若干槽位,每一所述槽位用于保存一个键值对的标签和指针。
在一种实施方式中,所述磁盘文件的结构包括若干层,每一层中包括若干所述有序键值对列表,同一层中各所述有序键值对列表分别对应的所述键区间允许重叠。
第二方面,本发明实施例提供一种键值存储系统的管理方法,所述方法应用于上述任一所述的键值存储系统,所述方法包括:
当所述哈希表被填满时,对所述哈希表进行冻结;
根据键的大小对所述哈希表中的键值对进行排序,根据排序结果生成所述磁盘文件中的一个所述有序键值对列表。
在一种实施方式中,所述方法还包括:
当区间查询访问到所述内存缓冲区时,对所述内存缓冲区的所述哈希表中的键值对进行排序;
将排序后的键值对复制到临时缓冲区用于进行所述区间查询。
在一种实施方式中,所述方法还包括:
当原分桶对应的所述磁盘文件被填满时,获取预设的划分点数;
根据所述划分点数对所述原分桶对应的所有所述有序键值对列表进行划分,得到每一所述有序键值对列表对应的若干分区;
对各所述有序键值对列表的同一顺序位的所述分区进行重组,得到所述原分桶对应的若干新分桶。
在一种实施方式中,所述方法还包括:
将所述原分桶的所有所述有序键值对列表有序合并到一个列表,得到合并列表;
根据所述划分点数对所述合并列表进行划分,得到所述原分桶对应的若干所述分区;
根据所述原分桶的各所述分区,一一对应地确定各所述新分桶最底层的所述有序键值对列表。
在一种实施方式中,所述方法还包括:
将新的键值对的增删改记录写入所述内存缓冲区和日志;
获取所述日志预设的数据量阈值,当所述日志的数据量达到所述数据量阈值时,将所述日志尾处对应的所述内存缓冲区的数据写入所述磁盘文件中,并对所述日志进行回收处理;
所述对所述日志进行回收处理包括:
计算所有所述内存缓冲区最后写入所述磁盘文件的最小序列号;将序列号小于或者等于所述最小序列号的所有所述增删改记录从所述日志中删除。
在一种实施方式中,所述方法还包括:
获取所述磁盘文件中各层分别对应的压缩优先级,其中,每一层对应的所述压缩优先级基于该层的所述有序键值对列表的总数、该层最近压缩后层内任意所述有序键值对列表被读取的总次数确定;
根据所述压缩优先级确定目标层,对所述目标层进行压缩,得到所述目标层的压缩列表,其中,压缩操作为将所述目标层的所有所述有序键值对列表有序合并到一个列表;
将所述目标层的压缩列表作为所述目标层下一层中新的所述有序键值对列表。
第三方面,本发明实施例提供一种终端,所述终端包括有计算机可读存储介质和一个以上处理器;所述计算机可读存储介质存储有一个以上的程序;所述程序包含用于执行如上述任一所述的键值存储系统的管理方法的指令;所述处理器用于执行所述程序。
本发明的有益效果:本发明实施例利用分桶排序的原理构建键值存储系统,将键空间分成多个分区进行管理,有利于在分桶中执行高效的复杂操作,比如对分桶中所有键值对进行排序,从而限制写放大倍数、制定更好的读感知压缩安排以及提高读取性能。克服了现有技术中基于LSM树构建的键值存储系统的写放大倍数过高的缺点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的键值存储系统的结构示意图。
图2是本发明实施例提供的基于LSM树的键值存储系统的架构示意图。
图3是本发明实施例提供的基于哈希表实现的内存缓冲区的原理示意图。
图4是本发明实施例提供的键值存储系统的管理方法的流程示意图。
图5是本发明实施例提供的终端的原理框图。
具体实施方式
本发明公开了一种键值存储系统和键值存储系统的管理方法,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
针对现有技术的上述缺陷,本发明提供一种键值存储系统,所述系统包括:若干分桶,各所述分桶分别对应不同的键区间,各所述分桶允许分裂和/或合并,每一所述分桶用于存储对应的所述键区间的键值对;每一所述分桶包括内存缓冲区和磁盘文件,所述内存缓冲区用于接收新的键值对,所述磁盘文件用于保存基于所述内存缓冲区写入的有序键值对列表。本发明利用分桶排序的原理构建键值存储系统,将键空间分成多个分区进行管理,有利于在分桶中执行高效的复杂操作,比如对分桶中所有键值对进行排序,从而限制写放大倍数、制定更好的读感知压缩安排以及提高读取性能。克服了现有技术中基于LSM树构建的键值存储系统的写放大倍数过高的缺点。
基于上述实施例,本发明还提供了一种键值存储系统,其特征在于,所述系统包括:
若干分桶,各所述分桶分别对应不同的键区间,各所述分桶允许分裂和/或合并,每一所述分桶用于存储对应的所述键区间的键值对;
每一所述分桶包括内存缓冲区和磁盘文件,所述内存缓冲区用于接收新的键值对,所述磁盘文件用于保存基于所述内存缓冲区写入的有序键值对列表。
具体地,如图1所示,本实施例相当于在基于LSM树的键值存储系统顶层再添加一个分桶上层,将键空间划分到一定数量的分桶中进行分区管理。每个键在系统中被唯一对应的分桶所持有,任何键值对都不需要跨分桶移动。每个分桶配备了一个内存缓冲区(MemTable)用于接受新的键值对,这些键值对的键落在分桶对应的键区间内。针对每一分桶,当该分桶的内存缓冲区填满后,整个内存缓冲区内的数据写入与该分桶对应的磁盘文件中,得到一个有序键值对列表。
在一种实现方式中,根据键空间确定键分布,根据所述键分布确定各所述分桶,以使得各所述分桶含有相同数量的键值对或者各所述分桶含有的键值对的数量差值小于一定阈值。简言之,本实施例需要将键空间分成多个尽量均匀的分区进行管理。
在一种实现方式中,所述内存缓冲区基于哈希表构建,所述哈希表包括若干条目,每一所述条目包括若干槽位,每一所述槽位用于保存一个键值对的标签和指针。
具体地,由于本实施例中的键值存储系统持有大量的内存缓冲区,因此内存局部访问的程度偏低。若内存缓冲区采用常用的跳表结构,则容易导致内存缓冲区的访问产生极高的CPU缓存漏检率,严重影响读写性能。因此本实施例采用哈希表构建内存缓冲区。哈希表具有多个条目,每个条目具有多个槽位,因此一次内存访问可以将多个槽位同时放入缓存行中,从而提高CPU缓存的命中率和读取性能。
举例说明,如图3所示,哈希表的每个条目具有64字节,对应CPU缓存行大小,并由8个8字节的槽位构成,每个槽位保存一个键值对的标签和指针。这样一次内存访问可以将8个槽位同时放入缓存行中。每个条目的8个槽位作为日志使用,新的键值对将添加到日志的末尾。
在一种实现方式中,所述磁盘文件的结构包括若干层,每一层中包括若干所述有序键值对列表,同一层中各所述有序键值对列表分别对应的所述键区间允许重叠。
具体地,本实施例中分桶的磁盘文件是通过层次结构来组织管理的。磁盘文件的结构包括多个层,每一层包括多个节点,每个节点是一个保存键值对的有序键值对列表(SSTable)。每一层中节点对应的键区间可以重叠,以避免同一层中重写文件来维持非冗余性。
基于上述实施例,本发明还提供了一种键值存储系统的管理方法,所述方法应用于上述键值存储系统,如图4所示,所述方法包括:
当所述哈希表被填满时,对所述哈希表进行冻结;
根据键的大小对所述哈希表中的键值对进行排序,根据排序结果生成所述磁盘文件中的一个所述有序键值对列表。
具体地,当哈希表的所有条目都填满后,系统将冻结该哈希表,并根据键的大小对表中所有键值对进行排序,然后写到一个新的磁盘文件中,即L0层的一个新的SSTable中。同时,系统将产生一个空的哈希表继续接收新的键值对。
在一种实现方式中,所述方法还包括:
当区间查询访问到所述内存缓冲区时,对所述内存缓冲区的所述哈希表中的键值对进行排序;
将排序后的键值对复制到临时缓冲区用于进行所述区间查询。
具体地,本实施例的系统支持增删改这些常规的写入操作。修改和删除操作通过写入一条写记录来实现的,实质的键值对修改或删除操作通过压缩过程来执行。系统支持的读操作包括针对某个键的单点查询和针对一组键的区间查询。单点查询先检索内存缓冲区,再按照L0、L1、……的次序逐层检索有序键值对列表,直到键被找到或者将对应分桶的所有层遍历完毕。在检索过程中,通过布隆过滤器(Bloomfilter)来判定键是否有可能在某个有序键值对列表中,以此提高检索效率。针对区间查询,由于本实施例的内存缓冲区是基于哈希表构建的,因此不能直接支持区间查询。当区间查询访问到内存缓冲区时,系统需要针对哈希表中的键值对进行排序,然后将其复制到仅在区间查询期间一次性使用的临时缓冲区中。需要说明的是,本实施例不同于FloDB中的双重内存结构方案。FloDB是在基于跳表的内存缓冲区的基础上添加一个哈希表,在哈希表不能找到查询条目时仍然需要访问跳表,因此仍然有较高的CPU缓存漏检率。此外,FloDB只适用于内存缓冲区占用大内存(比如192GB)的场景。而本实施例中的内存缓冲区只有数兆的大小,保存数千个键值对的标签和指针。因此,尽管针对内存缓冲区中键值对进行排序的代价较高,但由于键值对的数量少,排序也能够在极短(微秒级)的时间内完成。
在一种实现方式中,针对区间查询,读取所有与请求区间有重叠部分的分桶中的有序键值对列表,将所有读取的有序键值对列表合并成一个有序列表来检索。
在一种实现方式中,当区间查询在窗口时间内的并发量过大时,将内存缓冲区从哈希表结构转换为跳表结构,以避免键值对排序。若下次压缩操作后没有接收到区间查询,则系统将内存缓冲区从跳表结构转回哈希表结构。
在一种实现方式中,所述方法还包括:
当原分桶对应的所述磁盘文件被填满时,获取预设的划分点数;
根据所述划分点数对所述原分桶对应的所有所述有序键值对列表进行划分,得到每一所述有序键值对列表对应的若干分区;
对各所述有序键值对列表的同一顺序位的所述分区进行重组,得到所述原分桶对应的若干新分桶。
具体地,由于系统的初始化阶段的键分布是未知的,因此初始化阶段仅会构建单个分桶。当接收到的键值对增多导致键分布发生变化时,分桶将会变大并持有过多的有序键值对列表,使得读取性能严重下降。为了快速适应新状态,本实施例并非对整个存储内容进行重组,而是仅对填满的分桶进行分裂操作。具体地,用户预先设定一个划分点数,根据划分点数对需要分裂的分桶的所有有序键值对列表进行划分,使得每个有序键值对列表都被划分为相等数量的多个分区。然后将所有有序键值对列表中同一顺序位的分区进行重组,得到多个新分桶。
举例说明,假设分桶的每层中有序键值对列表最多有T个,则分桶填满定义为分桶的每层中有序键值对列表都达到T个。当分桶被填满时,分桶将被分裂成N个更小的分桶,其中,T和N均为用户预先设定的系统参数。针对需要分裂的分桶产生N-1个划分点,然后将这些划分点统一应用到分桶的所有有序键值对列表上,将每个有序键值对列表都划分为N个分区。所有有序键值对列表的第i个分区重组为第i个新分桶,其中i在1到N之间。
在一种实现方式中,由于划分点的选择决定了新分桶的均匀程度,因此针对每个有序键值对列表选择能等分为N个分区的划分点。
举例说明,假设填满的分桶有L层,则系统共产生L*T*(N-1)个候选的划分点。然后,系统再从这些候选划分点中选出能尽量等分这些候选划分点的N-1个划分点。
在一种实现方式中,在分桶的分裂期间,原分桶仍然接收新的键值对。在分桶的分裂结束后,即N个新分桶生成后,原分桶内存缓冲区中的键值对将写入对应键区间的新分桶中。每个新分桶会构建各自的内存缓冲区,用于接收新的键值对。同时,原分桶进入只读状态,仅用于回复新分桶不能回答的查询。
在一种实现方式中,所述方法还包括:
将所述原分桶的所有所述有序键值对列表有序合并到一个列表,得到合并列表;
根据所述划分点数对所述合并列表进行划分,得到所述原分桶对应的若干所述分区;
根据所述原分桶的各所述分区,一一对应地确定各所述新分桶最底层的所述有序键值对列表。
具体地,系统执行一次压缩操作将原分桶转变成一个有序列表,并根据选择的N-1个划分点分成N个分区保存到磁盘文件中,作为新分桶最底层的有序键值对列表。当新分桶有能力处理针对原分桶的所有查询后,原分桶将被清除。
在一种实现方式中,所述方法还包括:
判断各所述分桶分别对应的大小,将大小小于预设条件的分桶作为目标分桶;
将所述目标分桶合并至相邻的所述分桶中,并删除所述目标分桶。
具体地,当分桶执行了大量的删除操作后,其实际持有的键值对数量将会被大幅度减少。这时小分桶可能会在某些时候大量出现,因此可以将小分桶合并到相邻的分桶中并删除,以减少系统的内存占用。
在一种实现方式中,所述方法还包括:
将新的键值对的增删改记录写入所述内存缓冲区和日志;
获取所述日志预设的数据量阈值,当所述日志的数据量达到所述数据量阈值时,将所述日志尾处对应的所述内存缓冲区的数据写入所述磁盘文件中,并对所述日志进行回收处理;
所述对所述日志进行回收处理包括:
计算所有所述内存缓冲区最后写入所述磁盘文件的最小序列号;
将序列号小于或者等于所述最小序列号的所有所述增删改记录从所述日志中删除。
具体地,为了容错恢复存储系统,本发明提出的键值存储系统会将新的键值对增删改记录同时写入内存缓冲区和预写日志(write-aheadlog)中。本实施例预先设置了预写日志的数据量阈值,当日志的数据量达到数据量阈值时,在日志尾处对应的内存缓冲区将会被写入到磁盘文件中,与此同时向前移动日志尾指针,以增加日志的可用空间,防止产生过大的预写日志。当内存缓冲区写入磁盘文件后,由于现有的键值存储系统仅使用一个内存缓冲区,因此可以为每个键值对的增删改记录赋予一个按时间递增的序列号,在日志回收时将序列号小于或者等于最后写入磁盘文件的序列号的所有记录从日志中删除。而本实施例中每个分桶都具有各自的内存缓冲区,即使用了多个内存缓冲区,而所有分桶共用同一个预写日志,因此在日志回收时需要先计算所有内存缓冲区最后写入磁盘文件的最小序列号n,再将序列号小于或者等于这个最小序列号n的所有增删改记录从日志中删除。
在一种实现方式中,新的键值对增删改记录将会被添加到日志头,随之向前移动日志头指针,而回收的键值对增删改记录将从日志尾开始删除,并相应向前移动日志尾指针。
在一种实现方式中,所述方法还包括:
获取所述磁盘文件中各层分别对应的压缩优先级,其中,每一层对应的所述压缩优先级基于该层的所述有序键值对列表的总数、该层最近压缩后层内任意所述有序键值对列表被读取的总次数确定;
根据所述压缩优先级确定目标层,对所述目标层进行压缩,得到所述目标层的压缩列表,其中,压缩操作为将所述目标层的所有所述有序键值对列表有序合并到一个列表;
将所述目标层的压缩列表作为所述目标层下一层中新的所述有序键值对列表。
键值存储系统的读操作性能受制于不同层中的有序键值对列表的检索。层数越多,其配备的布隆过滤器的假真情况就越多,致使读请求需要更多的磁盘访问。为了减少磁盘访问,本实施例需要执行压缩操作将键值对向下层移动,以减少层数。然而密集的压缩操作会消耗更多的IO带宽、降低并发读请求的处理速度,因此本实施例针对密集读取的键值对优先安排压缩操作,从而削弱压缩操作对于读请求的副作用。具体地,由于本实施例中每个分桶只管理整个键空间的一小部分,因此只要读请求和压缩过程中产生的写请求不密集地落在同一个分桶中,系统就能针对密集读取的分桶优先安排压缩,减少该分桶中的层数并提高读取性能。即使在读写请求的键空间高度重合的情况下,新写入的键值对也很可能在随后的请求中立即被读取,使读请求能够在内存缓冲区中被处理完毕,而不涉及磁盘访问。针对每一层,本实施例会根据该层的有序键值对列表的总数、最近压缩后层内任意有序键值对列表被读取的总次数计算出该层的压缩优先级。然后可以将压缩优先级最高的前N个层作为进行压缩操作的目标层。本实施例的压缩策略是将待压缩的目标层中所有的有序键值对列表有序合并到一个列表。本实施例通过为每层设定压缩优先级,可以实现优先压缩读取频繁的层,而非那些只有少量读取请求或者有序键值对文件较少的层,从而提高系统的读取性能。
在一种实现方式中,压缩优先级等于read_weight*read_count/avg_read_count+sub_count/avg_sub_count。其中,sub_count为层的有序键值对列表的总数;read_count为层最近压缩后层内任意有序键值对列表被读取的总次数;read_weight为用户设定的参数,表示读取相对于压缩的重要性;avg_read_count和avg_sub_count分别是能执行压缩的所有层的平均read_count和平均sub_count。此外,系统限定能执行压缩的层至少具有min_count个有序键值对列表。
需要说明的是,本实施例中系统的写放大现象主要是由针对分桶的层次结构的压缩操作和分桶的分裂操作引起的。本实施例中由压缩操作引起的写放大倍数不超过分桶的最大层数L。而由分裂操作引起的写放大倍数不超过N/(N-1),其中N是分桶分裂时产生的子桶个数。因为分桶分裂引起新分桶再分裂需要为新分桶增加至少M-M/N个键值对,其中M是分桶在填满状态时的键值对个数,所以写放大倍数不超过M/(M-M/N),即N/(N-1)。因此,由压缩操作和分裂操作导致的写放大倍数不超过L+N/(N-1)。举例说明,假设L=3且N=8,这种设定下写放大倍数不会超过4.15。本实施例中的压缩操作可以保证写放大倍数限制在L+N/(N-1)以内,因此能有效克服现有技术中基于LSM树构建的键值存储系统的写放大倍数过高的缺点。
基于上述实施例,本发明还提供了一种终端,其原理框图可以如图5所示。该终端包括通过系统总线连接的处理器、存储器、网络接口、显示屏。其中,该终端的处理器用于提供计算和控制能力。该终端的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该终端的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现键值存储系统的管理方法。该终端的显示屏可以是液晶显示屏或者电子墨水显示屏。
本领域技术人员可以理解,图5中示出的原理框图,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的终端的限定,具体的终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一种实现方式中,所述终端的存储器中存储有一个以上的程序,且经配置以由一个以上处理器执行所述一个以上程序包含用于进行键值存储系统的管理方法的指令。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
综上所述,本发明公开了一种键值存储系统和键值存储系统的管理方法,所述系统包括:若干分桶,各所述分桶分别对应不同的键区间,各所述分桶允许分裂和/或合并,每一所述分桶用于存储对应的所述键区间的键值对;每一所述分桶包括内存缓冲区和磁盘文件,所述内存缓冲区用于接收新的键值对,所述磁盘文件用于保存基于所述内存缓冲区写入的有序键值对列表。本发明利用分桶排序的原理构建键值存储系统,将键空间分成多个分区进行管理,有利于在分桶中执行高效的复杂操作,比如对分桶中所有键值对进行排序,从而限制写放大倍数、制定更好的读感知压缩安排以及提高读取性能。克服了现有技术中基于LSM树构建的键值存储系统的写放大倍数过高的缺点。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (10)
1.一种键值存储系统,其特征在于,所述系统包括:
若干分桶,各所述分桶分别对应不同的键区间,各所述分桶允许分裂和/或合并,每一所述分桶用于存储对应的所述键区间的键值对;
每一所述分桶包括内存缓冲区和磁盘文件,所述内存缓冲区用于接收新的键值对,所述磁盘文件用于保存基于所述内存缓冲区写入的有序键值对列表。
2.根据权利要求1所述的键值存储系统,其特征在于,所述内存缓冲区基于哈希表构建,所述哈希表包括若干条目,每一所述条目包括若干槽位,每一所述槽位用于保存一个键值对的标签和指针。
3.根据权利要求1所述的键值存储系统,其特征在于,所述磁盘文件的结构包括若干层,每一层中包括若干所述有序键值对列表,同一层中各所述有序键值对列表分别对应的所述键区间允许重叠。
4.一种键值存储系统的管理方法,其特征在于,所述方法应用于权利要求2-3任一所述的键值存储系统,所述方法包括:
当所述哈希表被填满时,对所述哈希表进行冻结;
根据键的大小对所述哈希表中的键值对进行排序,根据排序结果生成所述磁盘文件中的一个所述有序键值对列表。
5.根据权利要求4所述的键值存储系统的管理方法,其特征在于,所述方法还包括:
当区间查询访问到所述内存缓冲区时,对所述内存缓冲区的所述哈希表中的键值对进行排序;
将排序后的键值对复制到临时缓冲区用于进行所述区间查询。
6.根据权利要求4所述的键值存储系统的管理方法,其特征在于,所述方法还包括:
当原分桶对应的所述磁盘文件被填满时,获取预设的划分点数;
根据所述划分点数对所述原分桶对应的所有所述有序键值对列表进行划分,得到每一所述有序键值对列表对应的若干分区;
对各所述有序键值对列表的同一顺序位的所述分区进行重组,得到所述原分桶对应的若干新分桶。
7.根据权利要求6所述的键值存储系统的管理方法,其特征在于,所述方法还包括:
将所述原分桶的所有所述有序键值对列表有序合并到一个列表,得到合并列表;
根据所述划分点数对所述合并列表进行划分,得到所述原分桶对应的若干所述分区;
根据所述原分桶的各所述分区,一一对应地确定各所述新分桶最底层的所述有序键值对列表。
8.根据权利要求4所述的键值存储系统的管理方法,其特征在于,所述方法还包括:
将新的键值对的增删改记录写入所述内存缓冲区和日志;
获取所述日志预设的数据量阈值,当所述日志的数据量达到所述数据量阈值时,将所述日志尾处对应的所述内存缓冲区的数据写入所述磁盘文件中,并对所述日志进行回收处理;
所述对所述日志进行回收处理包括:
计算所有所述内存缓冲区最后写入所述磁盘文件的最小序列号;
将序列号小于或者等于所述最小序列号的所有所述增删改记录从所述日志中删除。
9.根据权利要求4所述的键值存储系统的管理方法,其特征在于,所述方法还包括:
获取所述磁盘文件中各层分别对应的压缩优先级,其中,每一层对应的所述压缩优先级基于该层的所述有序键值对列表的总数、该层最近压缩后层内任意所述有序键值对列表被读取的总次数确定;
根据所述压缩优先级确定目标层,对所述目标层进行压缩,得到所述目标层的压缩列表,其中,压缩操作为将所述目标层的所有所述有序键值对列表有序合并到一个列表;
将所述目标层的压缩列表作为所述目标层下一层中新的所述有序键值对列表。
10.一种终端,其特征在于,所述终端包括有计算机可读存储介质和一个以上处理器;所述计算机可读存储介质存储有一个以上的程序;所述程序包含用于执行如权利要求4-9中任一所述的键值存储系统的管理方法的指令;所述处理器用于执行所述程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310206733.XA CN116204130A (zh) | 2023-02-23 | 2023-02-23 | 一种键值存储系统和键值存储系统的管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310206733.XA CN116204130A (zh) | 2023-02-23 | 2023-02-23 | 一种键值存储系统和键值存储系统的管理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116204130A true CN116204130A (zh) | 2023-06-02 |
Family
ID=86510967
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310206733.XA Pending CN116204130A (zh) | 2023-02-23 | 2023-02-23 | 一种键值存储系统和键值存储系统的管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116204130A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117235185A (zh) * | 2023-11-09 | 2023-12-15 | 腾讯科技(深圳)有限公司 | 数据平衡处理方法、装置及电子设备 |
-
2023
- 2023-02-23 CN CN202310206733.XA patent/CN116204130A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117235185A (zh) * | 2023-11-09 | 2023-12-15 | 腾讯科技(深圳)有限公司 | 数据平衡处理方法、装置及电子设备 |
CN117235185B (zh) * | 2023-11-09 | 2024-01-16 | 腾讯科技(深圳)有限公司 | 数据平衡处理方法、装置及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109213772B (zh) | 数据存储方法及NVMe存储系统 | |
EP2735978B1 (en) | Storage system and management method used for metadata of cluster file system | |
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
CN104899156B (zh) | 一种面向大规模社交网络的图数据存储及查询方法 | |
CN111309270B (zh) | 一种持久性内存键值存储系统 | |
Sarkar et al. | Lethe: A tunable delete-aware LSM engine | |
US7418544B2 (en) | Method and system for log structured relational database objects | |
CN107491523B (zh) | 存储数据对象的方法及装置 | |
CN108804510A (zh) | 键值文件系统 | |
CN113626431A (zh) | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统 | |
CN114780500B (zh) | 基于日志合并树的数据存储方法、装置、设备及存储介质 | |
CN110109927A (zh) | 基于LSM树的Oracle数据库数据处理方法 | |
CN111177090A (zh) | 一种基于子模优化算法的客户端缓存方法及系统 | |
CN113553476A (zh) | 一种利用哈希减少写停顿的键值存储方法 | |
CN113867627A (zh) | 一种存储系统性能优化方法及系统 | |
US20230350810A1 (en) | In-memory hash entries and hashes used to improve key search operations for keys of a key value store | |
CN116204130A (zh) | 一种键值存储系统和键值存储系统的管理方法 | |
Carniel et al. | A generic and efficient framework for flash-aware spatial indexing | |
CN111581218A (zh) | 一种利用双粒度加速访问基于日志结构合并树的键值数据存储的方法 | |
CN115114294A (zh) | 数据库存储模式的自适应方法、装置、计算机设备 | |
CN114490443A (zh) | 一种基于共享内存的golang进程内缓存方法 | |
CN112732725B (zh) | 基于nvm混合内存的自适应前缀树构建方法及其系统、介质 | |
Jensen et al. | Optimality in external memory hashing | |
CN117573676A (zh) | 基于存储系统的地址处理方法、装置、存储系统及介质 | |
Zhou et al. | Two is better than one: The case for 2-tree for skewed data sets |
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 |