【发布时间】:2011-03-02 14:57:44
【问题描述】:
在某些记录被更改(缩小)后,我决定使用 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_HASH 替换为 DB_BTREE,它会起作用,这就是为什么我认为它与使用 hash db 格式有关。但是,根据documentation,压缩哈希表应该可以正常工作。
有人知道可能导致此错误的原因吗?
PS:我使用的是 Berkeley DB 4.5.20。
【问题讨论】:
-
那么——哪个失败了?
compact电话或open电话?您的文字说明了一件事,但代码中的注释说明了另一件事......
标签: c berkeley-db