根据这个official benchmark,它在随机读取时执行129,000 ops / sec。但据我所知,随机读取需要至少一次随机访问磁盘(缓存对随机读取没有帮助,因为整个数据库比缓存大得多),并且一个随机访问磁盘需要大约10ms的磁盘搜索。这应该使随机读取速度低于100 ops / sec。
我在慢速机器上完成了100,000,000个MD5字符串的简单测试。随机写入执行大约50,000 ops / sec(距官方基准不远),随机读取执行大约20 ops / sec。
问题是:为什么leveldb的官方基准会获得如此高的成绩?我没有看到基准代码的特殊优化,基准测试不使用像SSD磁盘那样的东西。
答案 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中修复它。