Berkeley DB:DB-> compact()总是因基于散列的数据库而失败

时间:2011-03-02 14:57:44

标签: c berkeley-db

我决定使用Berkeley DB的压缩功能在一些记录被更改(缩小)后优化我的数据库的大小和缓存命中率,在数据库中留下“漏洞”。

然而,它不起作用。甚至没有这个简单的简化代码:

if (db->open(db, NULL, dbFile, NULL, DB_HASH, DB_CREATE | DB_TRUNCATE, 0)) {
  // Error...
}

if (res = db->compact(db, NULL, NULL, NULL, NULL, DB_FREE_SPACE, NULL)) {
  db->err(db, res, "Compacting failed");
}

我尝试指定第五个参数或省略了标志,但每次都使用EINVAL(代码22)失败:

  

压缩失败:参数无效

(太糟糕了,没有精简程序错误消息;大多数Berkeley DB错误都有它们)

如果我用DB_BTREE替换DB_HASH,这是有效的,这就是为什么我认为它与使用hash db格式有关。但是,根据documentation,压缩哈希表应该可以正常工作。

有人知道可能导致此错误的原因吗?

PS:我使用的是Berkeley DB 4.5.20。

1 个答案:

答案 0 :(得分:2)

我搜索了Berkeley DB最后几个版本的更改日志。 change log for release 5.0状态“添加了对DB->紧凑接口的哈希数据库支持。[#16936]”。虽然当前版本的online documentation表示DB-> compact适用于Btree,Recno和Hash数据库,但在5.0版本中添加了对Hash的支持。

您可能还想将问题发布到Berkeley DB Forum