本发明专利技术公开了一种键值存储系统和键值存储系统的管理方法,所述系统包括:若干分桶,各所述分桶分别对应不同的键区间,各所述分桶允许分裂和/或合并,每一所述分桶用于存储对应的所述键区间的键值对;每一所述分桶包括内存缓冲区和磁盘文件,所述内存缓冲区用于接收新的键值对,所述磁盘文件用于保存基于所述内存缓冲区写入的有序键值对列表。本发明专利技术利用分桶排序的原理构建键值存储系统,将键空间分成多个分区进行管理,有利于在分桶中执行高效的复杂操作,比如对分桶中所有键值对进行排序,从而限制写放大倍数、制定更好的读感知压缩安排以及提高读取性能。克服了现有技术中基于LSM树构建的键值存储系统的写放大倍数过高的缺点。点。点。
【技术实现步骤摘要】
一种键值存储系统和键值存储系统的管理方法
[0001]本专利技术涉及键值存储领域,尤其涉及的是一种键值存储系统和键值存储系统的管理方法。
技术介绍
[0002]键值存储系统也称为键值数据库,可以定义为非关系型的简单数据库,使用关联数组作为底层数据模型。在大多数情况下,键值存储在性能和速度方面提供了更好的改进。键值存储允许水平扩展,这是其他类型的数据库无法实现的,也是高度可分区的。为了能够通过键精确快速地定位值,键值存储使用紧凑高效的索引结构,特别适用于需要连续查找和检索数据的应用场景。
[0003]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进行合并和压缩就十分重要。压缩策略需要在读放大、写放大以及空间放大三种负面效应之间进行权衡以适配具体应用场景。
[0004]现有基于LSM树的键值存储系统中,写放大倍数过高仍然是一个比较严重的性能瓶颈问题。该问题使得LSM树的压缩合并速度越来越慢。
[0005]因此,现有技术还有待改进和发展。
技术实现思路
[0006]本专利技术要解决的技术问题在于,针对现有技术的上述缺陷,提供一种键值存储系统和键值存储系统的管理方法,旨在解决现有技术中基于LSM树构建的键值存储系统的写放大倍数过高的问题。
[0007]本专利技术解决问题所采用的技术方案如下:
[0008]第一方面,本专利技术实施例提供一种键值存储系统,其中,所述系统包括:
[0009]若干分桶,各所述分桶分别对应不同的键区间,各所述分桶允许分裂和/或合并,每一所述分桶用于存储对应的所述键区间的键值对;
[0010]每一所述分桶包括内存缓冲区和磁盘文件,所述内存缓冲区用于接收新的键值对,所述磁盘文件用于保存基于所述内存缓冲区写入的有序键值对列表。
[0011]在一种实施方式中,所述内存缓冲区基于哈希表构建,所述哈希表包括若干条目,每一所述条目包括若干槽位,每一所述槽位用于保存一个键值对的标签和指针。
[0012]在一种实施方式中,所述磁盘文件的结构包括若干层,每一层中包括若干所述有序键值对列表,同一层中各所述有序键值对列表分别对应的所述键区间允许重叠。
[0013]第二方面,本专利技术实施例提供一种键值存储系统的管理方法,所述方法应用于上述任一所述的键值存储系统,所述方法包括:
[0014]当所述哈希表被填满时,对所述哈希表进行冻结;
[0015]根据键的大小对所述哈希表中的键值对进行排序,根据排序结果生成所述磁盘文件中的一个所述有序键值对列表。
[0016]在一种实施方式中,所述方法还包括:
[0017]当区间查询访问到所述内存缓冲区时,对所述内存缓冲区的所述哈希表中的键值对进行排序;
[0018]将排序后的键值对复制到临时缓冲区用于进行所述区间查询。
[0019]在一种实施方式中,所述方法还包括:
[0020]当原分桶对应的所述磁盘文件被填满时,获取预设的划分点数;
[0021]根据所述划分点数对所述原分桶对应的所有所述有序键值对列表进行划分,得到每一所述有序键值对列表对应的若干分区;
[0022]对各所述有序键值对列表的同一顺序位的所述分区进行重组,得到所述原分桶对应的若干新分桶。
[0023]在一种实施方式中,所述方法还包括:
[0024]将所述原分桶的所有所述有序键值对列表有序合并到一个列表,得到合并列表;
[0025]根据所述划分点数对所述合并列表进行划分,得到所述原分桶对应的若干所述分区;
[0026]根据所述原分桶的各所述分区,一一对应地确定各所述新分桶最底层的所述有序键值对列表。
[0027]在一种实施方式中,所述方法还包括:
[0028]将新的键值对的增删改记录写入所述内存缓冲区和日志;
[0029]获取所述日志预设的数据量阈值,当所述日志的数据量达到所述数据量阈值时,将所述日志尾处对应的所述内存缓冲区的数据写入所述磁盘文件中,并对所述日志进行回
收处理;
[0030]所述对所述日志进行回收处理包括:
[0031]计算所有所述内存缓冲区最后写入所述磁盘文件的最小序列号;将序列号小于或者等于所述最小序列号的所有所述增删改记录从所述日志中删除。
[0032]在一种实施方式中,所述方法还包括:
[0033]获取所述磁盘文件中各层分别对应的压缩优先级,其中,每一层对应的所述压缩优先级基于该层的所述有序键值对列表的总数、该层最近压缩后层内任意所述有序键值对列表被读取的总次数确定;
[0034]根据所述压缩优先级确定目标层,对所述目标层进行压缩,得到所述目标层的压缩列表,其中,压缩操作为将所述目标层的所有所述有序键值对列表有序合并到一个列本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种键值存储系统,其特征在于,所述系统包括:若干分桶,各所述分桶分别对应不同的键区间,各所述分桶允许分裂和/或合并,每一所述分桶用于存储对应的所述键区间的键值对;每一所述分桶包括内存缓冲区和磁盘文件,所述内存缓冲区用于接收新的键值对,所述磁盘文件用于保存基于所述内存缓冲区写入的有序键值对列表。2.根据权利要求1所述的键值存储系统,其特征在于,所述内存缓冲区基于哈希表构建,所述哈希表包括若干条目,每一所述条目包括若干槽位,每一所述槽位用于保存一个键值对的标签和指针。3.根据权利要求1所述的键值存储系统,其特征在于,所述磁盘文件的结构包括若干层,每一层中包括若干所述有序键值对列表,同一层中各所述有序键值对列表分别对应的所述键区间允许重叠。4.一种键值存储系统的管理方法,其特征在于,所述方法应用于权利要求2
‑
3任一所述的键值存储系统,所述方法包括:当所述哈希表被填满时,对所述哈希表进行冻结;根据键的大小对所述哈希表中的键值对进行排序,根据排序结果生成所述磁盘文件中的一个所述有序键值对列表。5.根据权利要求4所述的键值存储系统的管理方法,其特征在于,所述方法还包括:当区间查询访问到所述内存缓冲区时,对所述内存缓冲区的所述哈希表中的键值对进行排序;将排序后的键值对复制到临时缓冲区用于进行所述区间查询。6.根据权利要求4所述的键值存储系统的管理方法,其特征在于,所述方法还包括:当原分桶对应的所述磁盘文件被填满时,获取预设的划分点数;根据所述划分点数对所述原分桶对应的所有所述有序键值对列表进行划分,得到每一所述有序键值对列表对应的若干分区;对各所述有序键值对列表的同一顺序位的所述分区进行重组,得到所述原分桶对应的若干新分桶。7.根据权利要...
【专利技术属性】
技术研发人员:张世明,杜剑峰,
申请(专利权)人:贝格迈思深圳技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。