一种混合索引内存数据库存储引擎管理方法与流程

文档序号:24720635发布日期:2021-04-16 15:02阅读:78来源:国知局
1.本发明涉及数据库存储引擎
技术领域
:,具体提供一种混合索引内存数据库存储引擎管理方法。
背景技术
::2.rocksdb是一个高性能的key‑value数据库。设计了完善的持久化机制,同时保证性能和安全性。能够良好的支持范围查询,因为key‑value记录就是按照key来排序的。主要的三个组成部分,内存结构memtable,类似事务日志角色的wal文件,持久化的sst文件。3.如图1所示,当memtable写入到达阈值之后,转化为immutablememtable,加入flush队列等待flush线程写入sst文件持久化。4.rocksdb中memtable转换城immutablememtable后,flush线程很快的进行sst文件写入操作,而lsm‑tree的分层结构compaction机制会出现写入数据的读写放大,大大影响了存储引擎的读写效率。而多个immutablememtable等待统一sst写入,对于查询又不友好,十分耗费cpu资源。5.注:memtable和immutablememtable两者都位于内存,属于内存的数据结构,它俩之间是一样的数据结构,两者的区别在于memtable可读可写,而immutablememtable是只读的,不允许写入。memtable承接来自客户的key‑value请求,当写入的数据占用内存到指定门限,就会自动转成immutablememtable,等待dump到磁盘中,同时rocksdb会产生新的memtable供写操作写入新的key‑valuepair。技术实现要素:6.本发明目的是为了优化现有分布式newsql数据库中基于rocksdb存储引擎读写性能问题。7.本发明为了优化现有分布式newsql数据库中基于rocksdb存储引擎读写性能问题,提供一种混合索引内存数据库存储引擎管理方法。8.为实现上述目的,本发明提供了如下技术方案:9.一种混合索引内存数据库存储引擎管理方法,所述方法基于rocksdb存储引擎的memtable管理机制,在memtable内部shiplist索引结构基础之上,添加b+tree/trie全局索引,用于key‑value的查询。10.所述方法通过设置多个memtable统一延迟落盘,使冷热数据分区管理。11.所述方法的实现包括内容如下:12.1)写入数据从memtable转换为immutablememtable后,将其加入b+tree/trie索引中;13.2)启动后台线程定时对写入immutablememtable的数据进行compaction压缩操作,以进行资源的回收;14.3)设定内存阈值,将写入数据按冷热数据划分,当写入immutablememtable的数据到达设定内存阈值,作为冷数据写入sstflush到磁盘。15.所述冷数据采取定时落盘方式,保证数据落盘次数尽量减少,减少磁盘压缩次数。16.所述方法的实现还包括内容如下:17.数据查询操作首先从memtable查询,然后查询b+tree/trie索引,最后查询sst。18.即数据查询尽量在内存中完成,减少读取磁盘的时间。19.所述方法的具体实现步骤包括:20.1)新建一个b+tree索引维护类(可直接使用lmdb等开源代码),根据key排序,value中保存memtable的value地址,支持put/get,事务提交等功能和iterator查询功能;21.2)索引初始化:22.在memtablelistversion中增加所述b+tree索引句柄,用于索引操作;23.3)索引创建:24.在后台bgflush线程操作函数memtablelist::pickmemtablestoflush中判断current_‑>memlist_队列(该队列中存储的是immutablememtable)中已添加索引memtable数量是否达到预设的flush阈值:25.未达到预设的flush阈值,把memlist_队列中未加入索引的memtable添加索引;26.达到预设的flush阈值,进行原flush逻辑操作。27.所述索引添加过程包括内容如下:28.调用memtable::newiterator接口创建iterator;29.通过所述iterator遍历该memtable中的所有key‑value项item;30.依次调用b+tree索引的put接口,将key及value地址保存到b+tree索引中。31.所述索引查询过程包括内容如下:32.在memtablelistversion::getfromlist中,首先从memlist中未加入b+tree索引的memtable中查询,如果未查询到则从b+tree索引中查询该key;33.在memtablelistversion::additerators两个函数中,首先把memlist中未加入b+tree索引的memtable创建iterator,加入iteratorlist/加入mergeitertor,然后后使用b+tree索引句柄创建索引的iterator,加入iteratorlist/加入mergeitertor。34.所述压缩操作的实现包括内容:35.启动后台memcompaction线程,根据immutablememtable的数量设定阈值;36.当达到所设定的阈值,从memlist队列的队尾,使用mergeiterator进行多个memtable的压缩(compaction)操作,生成新的memtable及wal,更新b+tree索引;37.原b+tree索引替换后,释放已废弃memtable。38.所述冷热数据的计算包括内容如下:39.在索引中key增加冷热数据计数器;40.根据该key的每次查询,计数器以递增方式计算最近一段时间的访问率;41.根据设定flush时间或阈值,压缩(compaction)时把热度低的key‑value记录放到单独的memtable中;42.flush操作时优先选择热度比较低的memtable进行flush操作,并更新b+tree索引。43.与现有技术相比,本发明一种混合索引内存数据库存储引擎管理方法具有以下突出的有益效果:44.本发明优化现有分布式newsql数据库中基于rocksdb存储引擎读写性能问题,充分发挥了内存的高效读写性能,可以在内存结构中缓存更多的数据,延迟并且减少落盘数据量,优化lsm结构的读写放大问题,支持冷热数据分区,当到达落盘阈值时,冷数据落盘,优化数据访问效率;可配置的内存使用量、落盘阈值设定、索引结构选择,用户可根据个性化需求灵活配置。附图说明45.图1是基于rocksdb存储引擎管理示意图;46.图2是本发明基于rocksdb存储引擎管理示意图。具体实施方式47.下面将结合附图和实施例,对本发明作进一步详细说明。48.一种混合索引内存数据库存储引擎管理方法,所述方法基于rocksdb存储引擎的memtable管理机制,在memtable内部shiplist索引结构基础之上,添加b+tree/trie全局索引,用于key‑value的查询,如图2所示,具体实现过程如下:49.1、memtable转换为immutablememtable后,将其加入b+tree/trie索引中。50.2、启动后台线程定时对immutablememtable进行compaction操作,以进行资源的回收。51.3、增加冷热数据计算,当到达设定内存阈值,把冷数据写入sstflush到磁盘。52.4、查询操作首先从memtable查询,然后查询b+tree/trie索引,最后查询sst。53.所述方法详细设计方案如下:54.新建一个b+tree索引维护类(可直接使用lmdb等开源代码),根据key排序,value中保存memtable的value地址,支持put/get,事务提交等功能,iterator查询功能等。55.1、索引初始化:56.memtablelistversion中增加上述b+tree索引句柄,用于索引操作。57.2、索引创建:58.在后台bgflush线程操作的函数memtablelist::pickmemtablestoflush中判断current_‑>memlist_(该队列中存储的是immutablememtable)队列中已添加索引memtable数量是否达到预设flush阈值,未达到阈值,把memlist_队列中未加入索引的memtable添加索引,达到阈值进行原flush逻辑操作。59.添加索引所及如下:60.调用memtable::newiterator接口创建iterator,通过该iterator遍历该memtable中的所有key‑valueitem,依次调用b+tree索引put接口,把该key及value地址保存到b+tree索引中。61.3、索引查询:62.在memtablelistversion::getfromlist中,首先从memlist中未加入b+tree索引的memtable中查询,如果未查询到则从b+tree中查询该key;63.在memtablelistversion::additerators(两个函数)中,首先把memlist中未加入b+tree索引的memtable创建iterator,加入iteratorlist(或加入mergeitertor),之后使用b+tree索引句柄创建索引的iterator,加入iteratorlist(或加入mergeitertor)。64.4、immutablememtable合并compaction65.启动后台memcompaction线程,根据memtable个数,当达到设定阈值,从memlist队列队尾,使用mergeiterator进行多个memtable的compaction操作,生成新的memtable及wal,更新b+tree,替换索引后释放已废弃memtable。66.5、冷热数据计算67.索引中key增加冷热数据计数器,每次查询该key计数器递增(计算最近一段时间的访问率),根据设定flush时间或到达阈值,compaction时把热度低的key‑value记录放到单独的memtable中,flush操作时优先选择热度比较低的memtable进行flush操作,并且更新b+tree。68.以上所述的实施例,只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1