2

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

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

问题是:为什么leveldb的官方benchmark能拿到这么高的成绩?我没有看到对基准代码的特殊优化,并且基准不使用 SSD 磁盘之类的东西。

4

3 回答 3

1

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

这是一个测试,展示了当数据集比 RAM 大 5 倍和 50 倍时 HyperLevelDB 的性能。(HyperLevelDB 是由 HyperDex 开发的 LevelDB 的一个分支,与原始版本相比,写入吞吐量有所提高。这一切都比原来慢了很多LMDB。) http://symas.com/mdb/hyperdex/

于 2013-12-09T14:25:36.010 回答
0

I think it is because you run the read test immediately after the write test. After the write test, leveldb may perform compaction, which cause heavy disk IO and slow down reads. So you should wait awhile after your write test. With 100,000,000 MD5 strings writes, I think you should wait minutes.

于 2013-08-27T17:40:16.130 回答
0

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

于 2013-10-08T13:42:07.227 回答