1

我正在尝试以每秒 50k 的插入速度向 BerkeleyDB 添加 3e9 键(重复性低),复合记录由具有两个整数的结构形成。每个键的长度为 30。我使用的是 C API。

看起来我必须将 cache_size 增加到 2GB,否则一段时间后数据库上的插入会变得非常慢。但是,它总是消耗超过 2GB 的 RAM。

我不使用事务或游标,我使用的是 DB_HASH。

如何确保我不会消耗这么多内存并且不会太慢?

4

1 回答 1

0

BerekelyDB 尊重 RAM 使用的用户设置,并将使用允许/配置的尽可能多的 RAM。如果您希望使用较少的 RAM,请配置较低的值。

同时,创建/插入时的缓慢可能是由于 BerkeleyDB 为确保新数据在 db->put 之后在磁盘上而进行的 fsync(2) 调用。

当您创建数据库并且并不真正关心数据是否已刷新到磁盘时,您可以通过使用 noop 例程(即只返回成功但不执行任何操作)覆盖 fsync(2) 向量来加速 BerkeleyDB。

于 2015-01-09T18:08:27.047 回答