LevelDB随机阅读 - 为什么官方基准如此好?

时间:2013-06-05 04:38:13

标签: c++ database storage benchmarking leveldb

根据这个official benchmark,它在随机读取时执行129,000 ops / sec。但据我所知,随机读取需要至少一次随机访问磁盘(缓存对随机读取没有帮助,因为整个数据库比缓存大得多),并且一个随机访问磁盘需要大约10ms的磁盘搜索。这应该使随机读取速度低于100 ops / sec。

我在慢速机器上完成了100,000,000个MD5字符串的简单测试。随机写入执行大约50,000 ops / sec(距官方基准不远),随机读取执行大约20 ops / sec。

问题是:为什么leveldb的官方基准会获得如此高的成绩?我没有看到基准代码的特殊优化,基准测试不使用像SSD磁盘那样的东西。

3 个答案:

答案 0 :(得分:1)

您链接到的官方基准测试结果是针对数据集非常小,以至于它完全适合测试计算机的RAM。即,即使LevelDB缓存没有,文件系统缓存也会保存所有数据。

这是一个测试,显示当数据集比RAM大5倍和50倍时,HyperLevelDB如何执行。 (HyperLevelDB是HyperDex民谣开发的LevelDB的一个分支,与原始版本相比,写入吞吐量有所提高。但它比LMDB要快得多。) http://symas.com/mdb/hyperdex/

答案 1 :(得分:0)

我认为这是因为您在写入测试后立即运行读取测试。在写入测试之后,leveldb可能会执行压缩,这会导致重磁盘IO并减慢读取速度。所以你应该在写测试后等一会儿。有100,000,000个MD5字符串写入,我想你应该等几分钟。

答案 2 :(得分:0)

关于吞吐量的Ricon East 2013演示文稿有一些不错的图表,描述了巨大吞吐量的问题以及他们如何在Riak中修复它。