leveldb的官方网站之一(http://code.google.com/p/leveldb/),有一个性能报告。我粘贴如下。
以下来自官方 leveldb 基准测试
这是包含的 db_bench 程序运行的性能报告(带有解释)。结果有些嘈杂,但应该足以获得大致的性能估计。
设置
我们使用包含一百万个条目的数据库。每个条目都有一个 16 字节的密钥和一个 100 字节的值。基准使用的值压缩到原始大小的一半左右。LevelDB:1.1版
CPU:4 x Intel(R) Core(TM)2 四核 CPU Q6600 @ 2.40GHz
CPU缓存:4096 KB
密钥:每个 16 字节
值:每个 100 字节(压缩后 50 字节)
条目:1000000
原始大小:110.6 MB(估计)
文件大小:62.9 MB(估计)
写入性能
“填充”基准以顺序或随机顺序创建一个全新的数据库。
“fillsync”基准在每次操作后将数据从操作系统刷新到磁盘;其他写操作将数据留在操作系统缓冲区缓存中一段时间。“覆盖”基准执行随机写入,更新数据库中的现有密钥。
填充序列:1.765 微秒/运算;62.7 MB/秒
填充同步:268.409 微/操作;0.4 MB/秒(10000 次操作)
填充随机数:2.460 微秒/运算;45.0 MB/秒
覆盖:2.380 微秒/操作;46.5 MB/秒
上面的每个“操作”对应于单个键/值对的写入。即,随机写入基准大约每秒写入 400,000 次。
以下来自我的 leveldb 基准测试
我为 leveldb 做了一些基准测试,但写入速度比报告低 100 倍。
这是我的实验设置:
- CPU:英特尔酷睿2双核T6670 2.20GHz
- 3.0GB内存
- 32 位 Windows 7
- 无压缩
- options.write_buffer_size = 100MB
- options.block_cache = 640MB
我所做的很简单:我只放了 200 万个 {key, value} 并且根本没有读取。键是一个包含 20 个随机字节的字节数组,值也是一个包含 100 个随机字节的字节数组。我不断地新随机 {key, value} 200 万次,没有任何其他操作。
在我的实验中,我可以看到写作的速度从一开始就下降了。即时速度(测量每 1024 次写入的速度)在 50/s 到 10, 000/s 之间波动。我对 200 万对的整体平均写入速度约为 3,000/s。写入的峰值速度为 10, 000/s。
由于报告声称写入速度可以是 400、000/s,我的基准测试的写入速度慢了 40 到 130 倍,我只是想知道我的基准测试有什么问题。
我不需要在这里粘贴我的测试代码,因为它非常简单,我只有一个循环 200 万次,在循环内,对于每次迭代,我生成一个 20 字节的密钥和 100 字节的值,然后将它们放入 leveldb 数据库。我还测量了 {key, value} 生成所花费的时间,它花费了 0 毫秒。
谁能帮我这个?如何使用 leveldb 实现 400、000/s 的写入速度?我应该改进哪些设置?
谢谢
而且
我刚刚在我的机器上运行了官方的 db_bench.cc。它比报告慢 28 倍。
我认为当我使用他们自己的基准程序时,我的基准程序和他们的基准程序之间的唯一区别是机器。