2012-01-16 7 views
2

私は最近、私が取り組んでいる大規模なアプリケーションのためにソファを使い始めました。CouchDBをローカルソファに複製すると、サイズが小さくなります - なぜですか?

Iデータベースが7907個のドキュメントを持ち、データベースの名前を変更したかった。私はちょっと覗いてみましたが、名前を変更する方法が分からなかったので、私はそれを私が望む名前のローカルデータベースに複製することになりました。

初めて試したところ、レプリケーションに失敗しました。エラーはタイムアウトだと思います。私はもう一度やり直しましたが、すぐにうまくいきました。少し戸惑っていました。

レプリケーション後、新しいデータベースのレコード数が正しいことがわかりますが、データベースのサイズは元の1/3です。

また奇数少しは私が布団を更新した場合、元の大きさは94.6の間と95.5メガバイト

を変動これは、いくつかの質問を私に残していることである:

  1. は、第二のデータベース保存しています最初の?もしそうなら、最初に害を及ぼすことなく削除できますか?

  2. なぜサイズがどう違うのですか?新しいインデックスが最終的に作成するオリジナルの索引はありましたか?

  3. なぜサイズが変動しますか?

編集

役に立つかもしれませんいくつかのこと:

  • これはcloudantのCouchDBの上
  • をインストールしている私は、新しいDBの最初と最後のレコードをチェックしますと一致するので、布団が過小評価されているとは思わない。

答えて

6

新しいデータベースへの複製は、圧縮と同様です。両方とも、新しい.couchファイルのサイズを縮小する特定の副作用(副次的に、意図的に)を伴います。

  • B-treeインデックスは、古い文書の改訂からバランスの取れた
  • データは破棄され得ます。
  • 以前のDBからの更新のメタデータは破棄されます。

レプリケーションはチェックポイントとの間で保存されるため、同じソースから同じ場所に再複製すると、タイムアウトしたレプリケーションを再実行します。

回答:

  1. レプリケーションは、別のデータベースへの参照を作成しません。害を及ぼすことなく最初のものを削除することができます。
  2. 複製(および圧縮)は、一般的にディスク使用量を減らします。デザインドキュメントにビューがある場合は、最初にクエリを実行したときに再構築されます。ビューインデックスでは、スペースを消費する独自のファイル.viewを使用します。
  3. なぜサイズが変動しているのかわかりません。ブラウザとプロキシのキャッシュは、CouchDB(およびWeb)開発の欠点です。しかしおそらく、内部クラウドの動作(クラスタ内の異なるノードがわずかに異なることを報告する別のノードなど)の結果である可能性もあります。
+0

非常に役に立ちます。私はビューを作成していないので、サイズの縮小に驚いて、実際にはローカルDBから元のデータベースを複製していました。私も更新を行っていないので、メタデータは比較的重要ではありません。しかし、私は今このデータについて心配していませんので、元のdbを削除してください。私は、雲が内部の複製を行い、異なるノードに当たることによって変動が生じたと考えました。何かがあれば私のデータでより安全に感じることができます。 – Jesse

+0

改善の余地があり、CouchDB 1.2が改善したと思います。しかし、これはCouchDBが誤解されている多くの方法の1つです。これは、信頼性のためにディスク使用量(およびI/O)を大幅に犠牲にするデータ構造とアルゴリズムを採用しています。 'kill -9'はCouchDBをシャットダウンするための完璧な方法だと考えてください。リスクはゼロです。当然、それは「無駄」だと思っていますが、本当のトレードオフは人的資源ではなくハードウェア資源を費やすことです。 – JasonSmith

関連する問題