2

私はCouchDBを見ています。ドキュメントにはバージョンがあり、競合するバージョンが存在する可能性があります。dvcsのように、バージョンシーケンスを有向非巡回グラフ(DAG)として保存しますか?そうでない場合、それはどのように実装されますか?

4

2 に答える 2

3

はい、リビジョン シーケンス有向非巡回グラフに似ています。これについては、「 CouchDB レプリケーションは Git に似ている」 で (概念レベルで) 説明しました。

CouchDB は、教育目的の Git に似ているとよく言います。ただし、大きな違いがあります。いくつか例を挙げると:

  • CouchDB は古いデータを保存せず、古いリビジョン ID のみを保存します
  • CouchDB は、パフォーマンスを維持するために、非常に長いリビジョン履歴を最終的に切り捨てます。

したがって、実際に 3 方向のマージを実現できるかどうかはわかりません。処理するデータのリビジョンはせいぜいソースとターゲットの 2 つしかないからです。共通の祖先は存在することが知られていますが、その値はありません。

これは一般的に問題になる可能性がありますが、実際にはそれほど悪くない「チート」がいくつかあります。

  • このvalidate_doc_update()機能により、任意の変更が防止されます。変更メタデータをドキュメントの一部として保存する必要がある場合もあります。(ただし、これはアプリケーション レベルのソリューションです。)
  • アプリケーションの大規模なクラスのデータの大規模なクラスは、双方向にマージできます。たとえば、最新のタイムスタンプを選択します。異なる電話番号を電話番号の配列にマージします。等

明らかに、これらはアプリケーション固有のものであり、一般的なソリューションではありません。

于 2011-10-05T13:45:02.740 に答える
0

CouchDB のドキュメントのバージョンに依存することはできません。それらは、レプリケーション中に競合を解決できるようにするためだけに保持されます。ドキュメントの以前のバージョンは、圧縮中に削除されます。

CouchDB wiki には、これに関する詳細があります。

于 2011-10-05T09:59:32.317 に答える