4

我正在使用以下打开:

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

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

我试图输入“tune_defrag=10000”,但我认为它不能正常工作。

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

谢谢你的帮助

4

4 回答 4

3

试试这个:

db.kch#dfunit=8

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

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

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

于 2011-02-11T02:33:19.267 回答
2

跑步:

kchashmgr 碎片整理 path_to_kcabinet_file

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

于 2014-03-11T11:08:24.127 回答
1

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

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

于 2010-12-20T08:24:37.603 回答
-1

粗略地浏览一下京都文档,您似乎没有任何方法可以调整大小或以其他方式清理已删除记录的数据库......或者真的以任何方式管理它。

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

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

于 2010-12-01T03:37:35.127 回答