2つのCouche間のレプリケーションがどのように機能するかを説明する技術文書はありますか?
CouchDBレプリケーションの基本的な概要は何ですか?それについていくつかの注目すべき特徴は何ですか?
残念ながら、レプリケーションプロトコルを説明する詳細なドキュメントはありません。 CouchDBに組み込まれているリファレンス実装と、Filipe Mananaによる同じものの書き直しだけがあり、これはおそらく将来的には新しい実装になるでしょう。
ただし、これは一般的な考え方です。
Gitを知っているなら、Couchレプリケーションがどのように機能するかを知っています。レプリケーションは非常に分散ソースマネージャーでプッシュまたはプルするのと似ていますGitのように。
CouchDBレプリケーションには独自のプロトコルがありません。レプリケーターは、クライアントとして2つのDBに接続し、一方から読み取り、もう一方に書き込みます。プッシュレプリケーションは、ローカルデータを読み取り、リモートDBを更新します。プルレプリケーションはその逆です。
レプリケーションアルゴリズムは簡単で、面白くありません。訓練された猿がそれを設計することができます。賢さはデータモデルであり、次のような便利な特性があるため、簡単です。
JOIN
またはトランザクションを実行する場合は問題がありますが、レプリケーターを作成する場合はすばらしいです。 oneレコードを複製する方法を理解してから、それを繰り返します各レコード。アプリケーションデータ({"name": "Jason", "awesome": true}
)に加えて、すべてのレコードには、それ自体に至るまでのすべての以前のリビジョンIDの進化のタイムラインが格納されます。
Gitは実際には線形リストではありません。 1人の親に複数の子がある場合、フォークがあります。 CouchDBにもそれがあります。
Exercise:2つの異なるレコードAとBを比較します。AのリビジョンIDはBのタイムラインに表示されません。ただし、1つのリビジョンID Cは、AとBの両方のタイムラインにあります。したがって、AはBから進化しませんでした。BはAから進化しませんでした。むしろ、AとBには共通の祖先Cがあります。Gitでは、これは「フォーク」です。 CouchDBでは、これは「競合」です。
Gitでは、両方の子供が独立してタイムラインを作成し続けるのであれば、それはすばらしいことです。フォークはそれを完全にサポートします。
1人の子供に複数の親がいる場合、Gitにもマージがあります。 CouchDBsort ofにもそれがあります。
git merge
はありませんでした。この記事の少なくとも1つの文(おそらくこれ)は完全なBSです。
素晴らしい概要を提供してくれたJasonに感謝します。 TouchDBとCouchbaseのレプリケーションに取り組んでいるJensAlfkeは、「標準」のCouchDBレプリケータープロトコルの傾向の技術的な詳細に興味がある場合は、(非公式に) CouchDBレプリケーションアルゴリズム 自体について説明しています。働くために。
彼が概説したステップを要約すると:
_changes
を取得しますrevs_diff
を使用して、ターゲットで必要なものを確認しますPUT
での通常の高レベルMVCC処理とは異なる方法でドキュメントを保存するためにbulk_docs
に投稿します。 。私はここで多くの詳細をざっと見てきました、そして元の説明も読むことをお勧めします。
CouchDB v2.0.0のドキュメントはレプリケーションアルゴリズムをカバーしています はるかに広範囲です。それらには、図、中間応答の例、およびエラーの例があります。それらは、IETF RFCの「MUST」、「SHALL」などの言語を使用します。
2.0.0(2016年1月の時点ではまだリリースされていません)の詳細は1.xとは少し異なりますが、基本はまだ @ natevwで説明されているように です。
Apache CouchDB Conf 201 で、Benjamin Youngは replication.io を彼の Replication、FTW!トーク 。 HTTPベースのマスターマスターレプリケーションの仕様を定義し、最終的にはミントにすることは継続的な取り組みです。
ここにも文書化されています: http://www.dataprotocols.org/en/latest/couchdb_replication.html そうですね。