rocksdb icon indicating copy to clipboard operation
rocksdb copied to clipboard

add hash sorted vector mem table

Open hcwang512 opened this issue 8 months ago • 1 comments

性能提升

与 skiplist 相比,读写速度提升 1.8x, scan 性能持平。

操作(micros/op) hash sorted vector skiplist 提升
randreadrandwrite 0.69 1.274 1.8x
newiterator 0.315 0.326 持平

Motivation

rocksdb 官方支持的5种 mem table 中,hash 类型的结构支持快速的查询,vector 类型的结构支持快速的写入,另外的一个缺陷是它们都没法支持 range scan. 因此在实际使用中更多会用 SkipList . 但是 SkipList 在并发读写的情况下性能不会太好。 需要一种新的结构(hash_sorted_vector)同时拥有 hash 的查询速度,vector 的写入速度,而且支持 range scan. hash_sorted_vector

如上图所示,在 hash_sorted_vector 中,数据会同时写入 hash 和 vector 中。hash 由大量的 bucket 组成,bucket 里是链表,锁作用在每个 bucket 内,以缓解锁带来的性能损失。 sorted_vector 由大量 sorted vector 和头部的 unsorted vector 组成,排序 vector 是只读的,数据只写入 unsorted vector. scan操作则只从 sorted vectors 里以 multi-way merge sort 的方式读取数据。每次的 scan 操作会将当前的 unsorted vector 排序,作为 sorted vectors 的一员,并生成一个新的 unsorted vector.

benchmarks

跑了 rocksdb 自带的 randomreadrandomwrite 和 newiterator, 运行环境是 ubuntu docker hosted in macbook pro m1 pro.

截图如下: image image

image image

hcwang512 avatar Jun 04 '24 12:06 hcwang512