2

主にドキュメントの添付ファイルを格納する CouchDB データベースがあります。

ファイルは次の構造の URL で db に保存されます: /db-name/numeric-file-id/official-human-sensitive-file-name.ext

1 つのドキュメントには常に 1 つの添付ファイルしかありません。今日、すべてのファイルの md5 合計を計算しましたが、それらの多くが重複しているようです。

私は、couchdb が重複した添付ファイルを認識しており、ファイルへのある種のポインターのみを内部的に保存し、参照カウントを追跡しているのか、それとも単に各添付ファイルをそのまま保存しているのか疑問に思っています。

つまり、100MB の同一ファイルを 5 つ添付した場合、データベースは 100MB と 500MB のどちらを使用するのでしょうか?

4

1 に答える 1

5

また、CouchDB ドキュメントでこの質問に対する直接的な回答を見つけることができなかったので、簡単な経験的テストを考案しました (CouchDB 1.4 を使用):

実験:

3 つのドキュメントを段階的に追加しました。各ドキュメントには、ドキュメント間で同一の複数の大きな (マルチ MB) 添付ファイルが含まれていました。次に、ドキュメントを挿入するたびに、結果の db.couch ファイルのディスク上のサイズを調べました。

結果:

db.couch ファイルは、1 回目、2 回目、3 回目のドキュメント挿入でそれぞれ 8MB から 16MB に、次に 24MB に増加しました。そのため、CouchDB は異なるドキュメントの同一の添付ファイルを重複排除していないようです。3 つのドキュメントが追加された後にデータベースを手動で圧縮しても、ファイル サイズに違いはありませんでした。そのため、バックグラウンド メンテナンス プロセスによって、これに気付いたり修正されたりすることもほとんどありません。

この添付ファイルの重複排除の欠如は、次の 3 つの観察結果を考えると、興味深い省略です。

  1. 作成者は、大きな添付ファイルを効率的に処理することに十分な関心を持っていたので、保存された添付ファイルの自動 gzip 圧縮を追加しました (何らかのテキスト コンテンツを示す MIME タイプを使用する場合)。

  2. 添付ファイルを追加すると、MD5 ダイジェストが計算され、添付ファイルのメタデータと共に保存されます。

  3. CouchDB は、DB にまだ保持されている同じドキュメントの複数のリビジョン間で共有されている同一の添付ファイルを重複排除しているようです (おそらく MD5 ダイジェストの 1 つの使用)。

これらの要因を考慮すると、CouchDB がこの点でよりインテリジェントではないことは驚くべきことです。

于 2013-11-08T09:28:12.150 に答える