|
|
1
3
您可能需要查看由db\u stat实用程序提供的信息以及可用的特定于哈希的调优函数。请看 BDB Reference Guide section on configuring a HASH database 我希望你能在商品硬件上每秒得到10万个插件。你经历了什么?你的绩效目标是什么? 当做, 戴夫 |
|
|
2
3
另外,我猜你打电话给mempèu涓流是造成经济放缓的主要原因。随着缓存变得越来越脏,查找要滴流的页面变得更加昂贵。事实上,由于您只是在写,拥有一个大的缓存只会带来伤害(一旦您写了数据,就不会再使用它,所以您不希望它在缓存中徘徊。)我建议测试不同(较小)的缓存大小。 最后,如果您唯一关心的是插入性能,那么使用较大的页面大小将有所帮助。您将能够在每一页上容纳更多的数据,从而减少磁盘写入。 -本 |
|
|
3
1
您还可以考虑使用BTREE而不是HASH。是的,我知道你特别说哈什,但为什么?如果您希望最大化性能,为什么要添加此限制?您可以利用引用的局部性来减少缓存占用空间—通常您相信的局部性要多得多,或者您可以创建一些—如果您生成的键是随机数字,例如,在日期和时间之前加上前缀。这通常会将局部性引入到一个可感知的“随机”系统中。如果您使用btree,您需要注意系统密钥的字节顺序(在Wikipedia中查找Endianness),如果您使用的是小Endian系统,则需要交换字节。使用具有正确顺序和引入的局部性的BTREE意味着您的键/值对将以“键生成时间”的顺序存储,因此,如果您看到最近的键上的大多数操作,您将倾向于反复访问相同的页(请在统计信息中查看缓存命中率)。所以你需要更少的缓存。另一种方法是,在相同的缓存量下,您的解决方案将按更大的倍数进行扩展。 我希望你的实际应用程序真的没有按顺序插入整数键(如果有,你会很幸运)。因此,您应该编写一个与您的访问模式非常接近的基准测试,至少在以下方面:键的大小、数据的大小、访问模式、数据库中的项目数、读/写混合。一旦你有了这些,看看统计数据——密切关注任何暗示IO或争用的东西。 顺便说一句,我最近在 http://libdb.wordpress.com 讨论BDB性能调整(以及与BDB相关的其他事项)。你可能会在那里得到一些好主意。延迟和吞吐量可能会有很大的差异,这取决于您所做的调优类型。具体见 http://libdb.wordpress.com/2011/01/31/revving-up-a-benchmark-from-626-to-74000-operations-per-second/ |
|
|
4
0
性能下降可能有几个原因,这些原因实际上与代码无关。我可能弄错了,但我认为这完全是关于内部数据库结构(和 ).
哈希表
,例如
RB树
. 插进那棵树里要花很多时间
哈希表
如果我是你,我会努力挖掘你的db内部结构。此外,我认为测试你的钥匙与其他东西,而不是你的数据库(例如
编辑:还要提的是,你有没有试着改变这一点
|