在使用文件哈希数据库的Kyoto Cabinet数据库中,如何避免文件大小增加?

时间:2010-12-01 03:26:37

标签: database key-value-store kyotocabinet

我正在使用以下打开:

db.open("db.kch#tune_defrag=10000", DB.OWRITER | DB.OCREATE)

我正在放置和删除元素。在执行结束时,数据库为“空”,count()函数返回0,因为我删除了所有元素。重复测试时为什么文件大小总是增加?是否可以运行类似“垃圾收集器”的东西来清理已删除的寄存器?如果我执行相同的测试100次,我有一个500 MB大小的数据库,即使我只有2个记录。

我试图把“tune_defrag = 10000”但我觉得它没有用。

Obs:唯一的寄存器小于1K,我不明白为什么寄存器在磁盘上占用了这么多空间。

感谢您的帮助

4 个答案:

答案 0 :(得分:3)

试试这个:

db.kch#dfunit=8

这意味着KC会在检测到的每8个碎片中运行碎片整理,而Mikio实际上会推荐8个。

此处列出了可用选项,但它可能会使用一些润色。

http://fallabs.com/kyotocabinet/command.html

答案 1 :(得分:2)

运行:

kchashmgr defrag path_to_kcabinet_file

是我做的'db文件'调整大小'。我没有找到api访问权限,这就是为什么我使用kchashmgr实用程序使用shell命令执行此操作(显然,这可以从程序内部调用)。

答案 2 :(得分:1)

我没有使用过这个特定的数据库,但在其他一些数据库中,解决此问题的方法是将数据库复制到新数据库中,然后删除旧数据库。确保复制好后:)。

我已经将这个过程实现到生产系统中,只要它编码得非常好,它应该可以工作。

答案 3 :(得分:-1)

从粗略看一下kyoto文档,看来你没有办法调整大小或以其他方式清理已删除记录的数据库......或者真的以任何形式或形式管理它。

该项目看起来距离“生产就绪”还有很长的路要走。如果你真的想要实现它,我建议联系项目所有者(http://fallabs.com/),看看他们是否有任何需要实用功能的计划。

否则,我建议转移到另一个更成熟的nosql样式数据库。

相关问题