4

私は以下を使用して開いています:

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

要素を入れたり抜いたりしています。実行の最後に、データベースは「空」になり、すべての要素を削除するため、count() 関数は 0 を返します。テストを繰り返すとファイル サイズが常に大きくなるのはなぜですか? 「ガベージコレクター」のようなものを実行して、削除されたレジスターをきれいにすることは可能ですか? 同じテストを 100 回実行すると、レコードが 2 つしかない場合でも、データベースのサイズは 500 MB になります。

「tune_defrag=10000」を入れてみましたがうまくいかなかったようです。

Obs .: 唯一のレジスターは 1K 未満です。レジスターがディスク内のスペースを大量に消費する理由がわかりません。

助けてくれてありがとう

4

4 に答える 4

3

これを試して:

db.kch#dfunit=8

これは、KC が検出された 8 つのフラグメンテーションごとにデフラグを実行することを意味し、実際には 8 つが Mikio によって推奨されています。

利用可能なオプションはここにリストされていますが、洗練されたものになる可能性があります。

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

于 2011-02-11T02:33:19.267 に答える
1

私はこの特定のデータベースを使用していませんが、他のいくつかのデータベースでは、この問題を解決するためのハックは、データベースを新しいデータベースにコピーしてから、古いデータベースを削除することです。それがうまくコピーされたことを確認した後:)。

私はこのプロセスを実稼働システムに実装しましたが、それが本当にうまくコーディングされている限り、機能するはずです。

于 2010-12-20T08:24:37.603 に答える
-1

kyotoのドキュメントをざっと見てみると、削除されたレコードのデータベースのサイズを変更したり、データベースをクリーンアップしたりする方法はないようです。

そのプロジェクトは、「本番環境に対応」することからは程遠いように見えます。本当に実装したい場合は、プロジェクトの所有者(http://fallabs.com/)に連絡して、非常に必要なユーティリティ機能の計画があるかどうかを確認することをお勧めします。

それ以外の場合は、もう少し成熟した別のnosqlスタイルのデータベースに移動することをお勧めします。

于 2010-12-01T03:37:35.127 に答える