c++ - LevelDB random read -- 为什么官方的benchmark这么好?

标签 c++ database storage benchmarking leveldb

根据这个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/

相关文章:

android - 数据库锁定问题android

database - Hibernate HQL查询分析工具?

c++ - 我如何编写一个 for 循环来遍历 CAtlMap 有选择地删除元素?

java - 实时服务器上的 MYSQL 未知列错误

android - 从内部存储读取 ArrayList

c++ - 大端和小端的概念

c# - 最推荐和最安全的指纹存储方式是什么?

c++ - SDL_RenderSetViewport 取所有绘制的对象

c++ - 使用 C++ 中的 UTF-16 编码文本截断读取

c++ - 我在 C++ 中收到 "template argument deduction/substitution failed:"错误