4

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 倍。

这是我的实验设置:

  1. CPU:英特尔酷睿2双核T6670 2.20GHz
  2. 3.0GB内存
  3. 32 位 Windows 7
  4. 无压缩
  5. options.write_buffer_size = 100MB
  6. 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 倍。

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

4

2 回答 2

3

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

其他潜在问题:

  • 很难确切地知道键是如何“随机”的:LevelDB 的性能取决于键的分布(即使它是“随机的”)。
  • 20 字节密钥的效率低于 16 字节密钥,因为它们也不能对齐。
  • 根据您的硬盘驱动器,您的磁盘写入速度可能会较慢(您检查一下)。

我们可以继续进行下去,但要考虑的变量太多了。如果您发布一些代码来演示您的测试如何运行,那么我们可以推荐一些优化,以便您获得更好的性能。

于 2012-02-22T17:33:15.240 回答
1

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

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

无法将苹果与橙子或苹果与 [未知水果] 进行比较。

于 2012-02-22T17:43:52.287 回答