leveldb的官方站点(http://code.google.com/p/leveldb/)上有一份性能报告。我粘贴如下。

以下来自官方的leveldb基准

这是包含的db_bench程序运行时的性能报告(带有说明)。结果有些嘈杂,但应该足以估算出性能。

设置

我们使用的数据库有100万个条目。每个条目都有一个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”基准都会将数据从操作系统刷新到磁盘;其他写入操作会将数据保留在操作系统缓冲区高速缓存中一会儿。 “覆盖”基准测试会随机写入,以更新数据库中的现有密钥。

fillseq:1.765 micros / op; 62.7 MB /秒

fillsync:268.409微秒/操作; 0.4 MB / s(10000次操作)

填充随机性:2.460 micros / op; 45.0 MB /秒

覆盖:2.380 micros / op; 46.5 MB /秒

上面的每个“ op”对应于单个键/值对的写入。也就是说,随机写入基准测试的结果为每秒大约40万次写入

下面是我的leveldb基准

我为leveldb做了一些基准测试,但是写入速度比报告低了100倍。

这是我的实验设置:

  1. CPU:Intel Core2 Duo T6670 2.20GHz
  2. 3.0GB内存
  3. 32位Windows 7
  4. 不压缩
  5. options.write_buffer_size= 100MB
  6. options.block_cache= 640MB

    我做的事情很简单:我只输入了200万个{键,值},根本没有读取。密钥是具有20个随机字节的字节数组,值也是具有100个随机字节的字节数组。我不断地将新随机的{key,value}放置200万次,而没有进行任何其他操作。

    在我的实验中,我可以看到写作的速度从一开始就下降了。即时速度(测量每1024个写入的速度)在50 / s到10,000 / s之间摆动。而且我对200万对的总体平均写入速度约为3,000 / s。写入的峰值速度为10,000 / s。

    该报告声称写入速度可以达到400、000 / s,基准测试的写入速度要慢40到130倍,我只是想知道基准测试出了什么问题。

    我不需要在这里粘贴测试代码,因为这非常容易,我只需要执行一次while循环200万次,并且在循环内部,对于每次迭代,我都会生成20个字节的密钥和100个字节值,然后将它们放入leveldb数据库。我还测量了花费在{key,value}生成上的时间,它花费了0毫秒。

    有人可以帮我吗?如何使用leveldb实现400,000 / s的写入速度?我应该改善哪些设置?

    谢谢

    此外

    我只是在机器上运行了官方的db_bench.cc。它比报告慢了28倍。

    我认为当我使用他们自己的基准测试程序时,我的基准测试与他们的基准测试之间的唯一区别是机器。

有帮助吗?

解决方案

您有200万个键值对,每个键值对共计120个字节,因此200万* 120字节= 228 MB的数据!您的缓存为640 MB,因此很有可能所有数据仍在RAM中,并且从未真正存入磁盘。正如Kitsune所指出的那样:您的硬件远没有Google测试过的硬件快,并且如果Google具有相同的缓存大小,那么可以很容易产生30倍的差异。

其他潜在问题:

  • 很难确切知道键的“随机性”:LevelDB的执行情况取决于键的分布(即使它是“随机”)。
  • 20字节密钥的效率要比16字节密钥低,因为它们也无法对齐。
  • 取决于您的硬盘驱动器,磁盘的写入速度可能会较慢(您检查您的)。

    我们可以不断进行下去,但是要考虑的变量太多了。如果您发布了一些代码来演示测试的运行方式,那么我们将建议您进行一些优化,以便获得更好的性能。

其他提示

当您在完全不同的硬件上运行相同的基准测试时,一定会发现一些差异。

  • 您的CPU的2xCores@2.2GHz比16xCores@2.4GHz弱9倍
  • 未提及您的硬盘驱动器和官方基准测试的驱动器(光纤NAS与固态驱动器SSD与硬盘驱动器HDD)

    不能将苹果与桔子或苹果与[未知水果]进行比较。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top