1 .一种内存数据库存储引擎管理方法,其特征在于:基于RocksDB存储引擎的Memtable
管理机制,在Memtable内部新建ART索引用以取代skiplist索引,采用ART索引加Hash索引
的双索引机制查询key‑value;
具体实现过程如下:
1)将插入Memtable的数据转为插入到ART算法管理的内存块中,并将ART算法的叶节点
地址加入Hash索引中;
新建一个ART索引维护类,使用ART算法替换Memtable中的skiplist算法;在ART索引维
护类中新建一个Hash索引类成员HashMap,用于ART索引叶节点的快速查询;
2)修改Memtable刷盘的逻辑,使得Memtable永不转换imMemtable,通过内存块的形式
进行刷盘,内存块通过双向链表进行管理;
启用异步刷盘线程,维护所有内存块的队列,队列按照内存块的上次刷盘时间排序;线
程从队列取内存块,并将内存块增量的key‑value数据进行落盘,追加到文件末尾或形成新
的磁盘SST文件;
3)执行查询操作时,先从Hash表中查询,然后查询ART树,最后查询磁盘SST文件;
调用Memtable::NewIterator接口创建基于ART树的Iterator,用于遍历ART树中的节
点;
新建Memtable::NewHashIterator接口,增加ReadOptions参数,用于判断是否为
MVCCGet读取;如果是则调用NewHashIterator接口,直接从Hash表中查找存储key的双向链
表所对应的叶子节点,如果不是则调用NewIterator接口在hash索引中查找叶子节点,若没
有再去ART索引查询;
最终得到ART树的叶子节点,得到存储多版本key的双向链表,通过遍历双向链表得到
内存块中的数据;
当读取多版本数据即MVCCGet数据时,在Hash表中取出key对应的叶子节点,然后从叶
子节点对应的双向链表中取出对应的key;如果hash索引中没有查到key,说明已经数据已
经落盘,则去磁盘SST文件中查找;
当读取非MVCCGet数据时,则在hash索引中查找对应的叶子节点,若没找到对应的叶子
节点,则在ART树中查找叶子节点,若ART树中没有找到对应的叶子节点,则去磁盘SST文件
中查找。
2.根据权利要求1所述的内存数据库存储引擎管理方法,其特征在于:所述步骤1)中,
写入的数据在内存中以内存块的形式存储,通过双向链表对key进行排序,双向链表的每个
节点内存储当前key对应的多个版本数据形成的链表,双向链表的每个节点指向内存块存
储的该key对应的key‑value;所述ART索引用于快速定位双向链表的特定节点,所述Hash索
引用于快速查询ART树的叶子节点的地址;
写入数据时,首先通过Hash索引与ART索引计算待插入的叶子结点位置,然后根据ART
的叶子节点添加双向链表,通过双向链表对业务key进行排序。
3 .根据权利要求2所述的内存数据库存储引擎管理方法,其特征在于:所述步骤1)中,
当有新的key插入叶子节点时,使用ART算法快速定位到双向链表的插入节点进行插入,同
时增加hash表的插入逻辑,对Hash表加锁;将key的String类型作为Hash表中的key,将叶子
节点指针位置作为Hash表中的value插入到Hash表中。
权 利 要 求 书
1/2 页
2
评论