我决定使用Berkeley DB的压缩功能,以优化尺寸,我的数据库高速缓存的命中率有些记录被修改后(收缩),留下“洞“在数据库中。的Berkeley DB: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");
}
我试图specifing第五个参数或离开了该标志,但仍无法与EINVAL(代码22)每次:
压实失败:无效的参数
(太糟糕了,没有一个更加精密的错误信息;最Berkeley DB的错误让他们)
它的工作原理我f我用DB_BTREE替换DB_HASH,这就是为什么我相信它与使用散列数据库格式有关。但是,根据documentation,压缩哈希表应该工作得很好。
有没有人有一个想法是什么可能会导致这样的错误?
PS:我使用的Berkeley DB 4.5.20。
所以 - 这不成? “紧凑”呼叫或“开放”呼叫?你的文字说了一件事,但你的代码中的评论说另一个... – 2011-03-02 15:03:30