[发明专利]一种内存数据库存储引擎管理方法有效
申请号: | 202110894627.6 | 申请日: | 2021-08-05 |
公开(公告)号: | CN113688130B | 公开(公告)日: | 2023-10-13 |
发明(设计)人: | 张华海 | 申请(专利权)人: | 上海沄熹科技有限公司 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/2455 |
代理公司: | 济南信达专利事务所有限公司 37100 | 代理人: | 郗艳荣 |
地址: | 200120 上海市浦东新区中国(上海)自由贸*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 内存 数据库 存储 引擎 管理 方法 | ||
1.一种内存数据库存储引擎管理方法,其特征在于:基于RocksDB存储引擎的Memtable管理机制,在Memtable内部新建ART索引用以取代skiplist索引,采用ART索引加Hash索引的双索引机制查询key-value,优化RocksDB存储引擎的读性能,从而实现RocksDB内存引擎模式,减少磁盘读写,提高查询速度。
2.根据权利要求1所述的内存数据库存储引擎管理方法,其特征在于,具体实现过程如下:
1)将插入Memtable的数据转为插入到ART算法管理的内存块中,并将ART算法的叶节点地址加入Hash索引中;
2)修改Memtable刷盘的逻辑,使得Memtable永不转换imMemtable,通过内存块的形式进行刷盘,内存块通过双向链表进行管理;
3)执行查询操作时,先从Hash表中查询,然后查询ART树,最后查询磁盘SST文件。
3.根据权利要求2所述的内存数据库存储引擎管理方法,其特征在于:所述步骤1)中,写入的数据在内存中以内存块的形式存储,通过双向链表对key进行排序,双向链表的每个节点内存储当前key对应的多个版本数据形成的链表,双向链表的每个节点指向内存块存储的该key对应的key-value;所述ART索引用于快速定位双向链表的特定节点,所述Hash索引用于快速查询ART树的叶子节点的地址;
写入数据时,首先通过Hash索引与ART索引计算待插入的叶子结点位置,然后根据ART的叶子节点添加双向链表,通过双向链表对业务key进行排序。
4.根据权利要求3所述的内存数据库存储引擎管理方法,其特征在于:所述步骤1)中,当有新的key插入叶子节点时,使用ART算法快速定位到双向链表的插入节点进行插入,同时增加hash表的插入逻辑,对Hash表加锁;将key的String类型作为Hash表中的key,将叶子节点指针位置作为Hash表中的value插入到Hash表中。
5.根据权利要求2所述的内存数据库存储引擎管理方法,其特征在于:所述步骤1)中,新建一个ART索引维护类,使用ART算法替换Memtable中的skiplist算法;在ART索引维护类中新建一个Hash索引类成员HashMap,用于ART索引叶节点的快速查询。
6.根据权利要求5所述的内存数据库存储引擎管理方法,其特征在于:所述步骤1)中,使用PureMemRep类继承public MemtableRep,新增Memtable的内存仓库管理类,使用InlineART类替换InlinSkiplist类,用以实现基于ART算法的内存数据索引;在InlineART类中增加类成员HashTable,hash表中存放ART叶节点和key。
7.根据权利要求2所述的内存数据库存储引擎管理方法,其特征在于:所述步骤2)中,启用异步刷盘线程,维护所有内存块的队列,队列按照内存块的上次刷盘时间排序;线程从队列取内存块,并将内存块增量的kv数据进行落盘,追加到文件末尾或形成新的磁盘SST文件。
8.根据权利要求2所述的内存数据库存储引擎管理方法,其特征在于:所述步骤3)中,调用Memtable::NewIterator接口创建基于ART树的Iterator,用于遍历ART树中的节点;
新建Memtable::NewHashIterator接口,增加ReadOptions参数,用于判断是否为MVCCGet读取;如果是则调用NewHashIterator接口,直接从Hash表中查找存储key的双向链表所对应的叶子节点,如果不是则调用NewIterator接口在hash索引中查找叶子节点,若没有再去ART索引查询;
最终得到ART树的叶子节点,得到存储多版本key的双向链表,通过遍历双向链表得到内存块中的数据。
9.根据权利要求8所述的内存数据库存储引擎管理方法,其特征在于:所述步骤3)中,当读取多版本数据即MVCCGet数据时,在Hash表中取出key对应的叶子节点,然后从叶子节点对应的双向链表中取出对应的key;如果hash索引中没有查到key,说明已经数据已经落盘,则去磁盘SST文件中查找;
当读取非MVCCGet数据时,则在hash索引中查找对应的叶子节点,若没找到对应的叶子节点,则在ART树中查找叶子节点,若ART树中没有找到对应的叶子节点,则去磁盘SST文件中查找。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海沄熹科技有限公司,未经上海沄熹科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110894627.6/1.html,转载请声明来源钻瓜专利网。