mace 记录 -- 写入优化

目前所做的优化 (0.0.11)

不太可行的优化

可能的优化


总的来讲,由于 B+ 树的性质,SMO 不可避免的需要进行内存拷贝,另外加之Bw树 append-only的性质,不可避免的需要定期将 delta 合并到 base 也需要内存拷贝,那么能做的就是:减少拷贝的次数(频率),特别是多线程环境下,CAS 只有一个线程能成功,而其他线程此前为了 compact 和 SMO 所作的拷贝全都是无效的

一下是优化前后性能对比, 数据源 x.csv

insert.png

get.png

mixed.png

从结果来看(SSD),mace 在查询性能上远超 rocksdb,0.0.10 在插入上不及 rocksdb,而优化后的 0.0.11 只有在1024的key大小下单线程插入时略低于 rocksdb,rocksdb 的 Leader-Follower 写机制(也就是 Group Commit)不能 scale,因为瓶颈不在磁盘上。而在HDD上则比 mace 更有优势,这时的瓶颈就是磁盘,并发的小块写不如单线程大块写,这种情况下可以增加配置,单独在 SSD 上写 WAL (测试发现,大约有6倍多的提升,接近 rocksdb 的水平)

测试代码: https://github.com/abbycin/kv_bench