我正在尝试以每秒50k的插入速度向BerkeleyDB添加3e9个键(低重复性),其中包含由具有两个整数的struct形成的复合记录。每把钥匙的长度是30。我在用C API。
看起来我必须将缓存大小增加到2GB,否则一段时间后插入数据库的速度会非常慢。然而,它总是消耗超过2GB的内存。
我不使用事务或游标,而是使用DB_散列。
如何确保我不会消耗这么多内存,也不会太慢?
最佳答案
BerekelyDB尊重RAM使用的用户设置,并将使用尽可能多的RAM。
如果希望使用较少的RAM,请配置较低的值。
同时,创建/插入时的S-L-O-W可能是由于BerkeleyDB进行fsync(2)调用以确保db->put之后新数据在磁盘上。
通过使用noop例程重写fsync(2)向量,可以加快BerkeleyDB的速度
(即,只返回成功但不执行任何操作)在创建数据库时
不关心数据是否已刷新到磁盘。
关于c - BerkeleyDB变得肥胖而缓慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15127468/