2010-12-01 11 views
4

私は開くようにフォローを使用しています:ファイルハッシュデータベースを使用した京都キャビネットデータベースでは、ファイルサイズが大きくなるのを防ぐにはどうすればよいですか?

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

私は入れて要素を削除しています。実行終了時にデータベースは "空"ですが、count()関数はすべての要素を削除するため0を返します。テストを繰り返すとファイルサイズが常に増加するのはなぜですか?削除されたレジスタをクリーニングするために "ガベージコレクタ"のようなものを実行することは可能ですか?同じテストを100回実行すると、500 MBのサイズのデータ​​ベースがあり、2つのレコードしかありません。

私は "tune_defrag = 10000"を入れようとしましたが、うまく動作しなかったと思います。

Obs:唯一のレジスタが1K未満であるため、なぜレジスタがディスク内に非常に多くの領域を占めるのか分かりません。京都のドキュメントを通じてザッ見てから任意のヘルプ

答えて

-1

ため

おかげで、あなたがいずれかでそれを管理するために、実際に削除されたレコードのデータベースをきれいに...あるいはサイズを変更したりする方法を持っていることは表示されません。方法または形状。

このプロジェクトは、「生産準備完了」から遠く離れているように見えます。本当に実装したい場合は、プロジェクトの所有者(http://fallabs.com/)に連絡して、必要なユーティリティ機能の計画があるかどうかを確認することをお勧めします。

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

+0

申し訳ありませんが、私は本当にそうは思わない。 –

+0

@Spamkids:どの部分についてそうは思わない? (ちょうど理解しようとしている)。 – NotMe

+0

私はここでいくつかのテストを行い、興味深い事実を発見しました。もし私がデータベースをバックアップしたときにプロセスをkillしたら(kill-kill -9)公式の文書で述べたように、データベースは "自動復旧"を有効にしています。私は内部変数を見て、 "再編成された"は1に設定されます(私はすべてをやっと閉じますが、常に0でした)。だから、私は再編成のようなものを強制することが可能だと思います。私はちょうど方法を知らない。それは不溶性の問題ではない、私はそれについてほとんど確信している。私はちょうど解決する方法を見つけませんでした。 –

1

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

私は実際にうまくコード化されている限り、このプロセスを実動システムに実装しました。

+0

haha​​h、非常に創造的な解決策!それは動作するようだが、それは少し汚れていますか? –

3

これを試してみてください:

db.kch#dfunit=8 
KCが検出されたすべての8断片化のためにデフラグを実行している意味

、および8実際幹男によって推奨されています。

利用可能なオプションはここにリストされていますが、多少の磨きをかけることもできます。

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

+0

ありがとうございます。私が試してみます。 –

2

ランニング:

kchashmgrデフラグpath_to_kcabinet_file

私は、DBファイル 'リサイズ' を得るために行うものです。私はこれにアクセスするAPIが見つからなかったので、kchashmgrユーティリティ(obviosulyこれはプログラムの中から呼び出すことができます)を使用してシェルコマンドを実行します。

関連する問題