管道式写

RocksDB 5.5中添加的流水线写特性是为了在启用WAL时提高鬓发写吞吐量。默认情况下,为并发写入器维护一个写线程队列。 到达队列头部的线程成为写批处理组长,负责为批处理组向WAL和memtable写操作。

一个观察是,WAL写和memtable写是顺序的,通过让它们并行运行,我们可以提高吞吐量。对于单个写入器,WAL和memtable写入必须按顺序运行。 对于并发写器,前一个写器写完WAL后,在写队列中等待的下一个写器可以开始写WAL,而前一个写器仍然在进行memtable写。这就是流水线写所做的。

要启用管道写,只需设置Options.enable_pipelined_write=true. db_bench 基准测试显示,当数据库存储在 ramfs 中且压缩吞吐量不是瓶颈时, 启用并发写器和WAL可以提高20%的写吞吐量。

Benchmarks基准测试

我们在tempfs上运行db_bench,同时启用了8个线程写操作,Memtable是默认的skiplist Memtable,大小为64MB。启用了LZ4压缩。 使用流水线写,我们在写吞吐量上得到了大约30%的改进。生的结果:https://gist.github.com/yiwu-arbug/3b5a5727e52f1e58d1c10f2b80cec05d