2013-02-28 166 views
1

我正試圖將3e9鍵(帶低重複)添加到伯克利數據庫中,每秒鐘插入次數爲50k,複合記錄由兩個整數構成。每個鍵都有長度30.我使用C API。BerkeleyDB越來越胖,越來越慢

看起來我必須將cache_size增加到2GB,否則在一段時間後插入數據庫會變得非常緩慢。但是,它總是在RAM上消耗超過2GB。

我不使用事務或遊標,我正在使用DB_HASH。

如何確定我不會消耗太多內存並且不會太慢?

+0

3 _billion_ keys ?!在每秒50k時,即將插入將近17個小時。 – 2013-02-28 04:30:16

+1

如果您在固態驅動器(SSD)中使用該操作系統,性能會有大幅提升?如果你在一些Unix下,你可以看看noatime http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap6sec73.html – 2013-02-28 08:52:05

+0

@DavidRF如果我使用SSD我會以比每秒50k更快的速度寫入數據庫,但這並不重要,因爲我的應用程序不會如此快速地生成數據。 – 2013-02-28 13:56:09

回答

0

BerekelyDB尊重RAM使用的用戶設置,並將使用盡可能多的RAM作爲允許/配置。 如果您希望使用更少的RAM,請配置較低的值。

同時創建/插入時的S-L-O-W可能是由於BerkeleyDB爲確保新數據在db-> put之後的磁盤上所做的fsync(2)調用。

您可以通過覆蓋FSYNC(2)載體與加快的BerkeleyDB一個空操作,日常 (即只返回成功,但什麼都不做),當您創建數據庫和 真的不關心數據是否已被刷新到磁盤尚未。