根据这个official benchmark ,它在随机读取时执行 129,000 次操作/秒。但据我所知,随机读取至少需要一次随机访问磁盘(缓存对随机读取没有帮助,因为整个数据库比缓存大得多),并且一个随机访问磁盘需要大约 10ms 的磁盘搜索时间。这应该使随机读取速度低于 100 次操作/秒。
我在我的慢速机器上用 100,000,000 个 MD5 字符串做了一个简单的测试。随机写入执行大约 50,000 次操作/秒(与官方基准相差不远),随机读取执行大约 20 次操作/秒。
问题是:为什么leveldb的官方benchmark能得到这么高的成绩?我没有看到基准测试代码有什么特别的优化,基准测试也没有使用 SSD 磁盘之类的东西。
最佳答案
您链接到的官方基准测试结果是针对一个非常小的数据集,以至于它完全适合他们测试机器的 RAM。即,文件系统缓存保存了所有数据,即使 LevelDB 缓存没有。
下面的测试显示了当数据集比 RAM 大 5 倍和 50 倍时 HyperLevelDB 的性能。 (HyperLevelDB 是由 HyperDex 开发的 LevelDB 的一个分支,与原始版本相比,写入吞吐量有所提高。不过它比 LMDB
慢很多。)
http://symas.com/mdb/hyperdex/
关于c++ - LevelDB random read -- 为什么官方的benchmark这么好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16931664/