web-dev-qa-db-ja.com

OTとCRDTの違い

誰かがOperational TransformとCRDTの主な違いを簡単に説明できますか?

私が理解している限り、どちらも分散システムの異なるノードで競合することなくデータを収束させるアルゴリズムです。

どのユースケースでどのアルゴリズムを使用しますか?私が理解している限り、OTは主にテキストに使用され、CRDTはより一般的で、より高度な構造を処理できますか?

CRDTはOTよりも強力ですか?


私がこの質問をするのは、HTMLドキュメント用の協調エディタを実装する方法を確認しようとしているため、どちらを最初に見るかわからないためです。 ShareJSプロジェクトと、ブラウザでのcontenteditables要素のリッチテキストコラボレーションのサポートの試みを見ました。 ShareJSのどこにもCRDTを使用する試みは見られません。

また、GoogleドキュメントはOTを使用しており、リッチドキュメントのリアルタイムエディションで非常にうまく機能しています。当時CRDTはあまり知られていなかったため、GoogleがOTを選択したのですか?それとも今日も良い選択でしょうか?

これらのアルゴリズムをデータベースで使用するなど、他のユースケースについても聞きたいです。 RiakはCRDTを使用しているようです。 OTを使用してデータベースのノードを同期し、Paxos/Zab/Raftの代替にすることはできますか?

53

どちらのアプローチも結果整合性を提供するという点で似ています。違いは、彼らがそれを行う方法にあります。これを見る1つの方法は次のとおりです。

  • OTはoperationsを変更することでそれを行います。操作はネットワーク経由で送信され、受信すると、並行操作が変換されます。
  • CRDTはstateを変更することでそれを行います。操作はローカルCRDTで行われます。その状態はネットワーク経由で送信され、コピーの状態とマージされます。マージの回数や順序は関係ありません。すべてのコピーが収束します。

そうです、OTは主にテキストに使用され、CRDTの前に行われますが、 research は次のことを示しています。

多くのOT文献のアルゴリズムは、著者が述べたものとは異なり、収束特性を満たしていません

言い換えれば、CRDTマージは可換であるが、OT変換関数はそうでない場合があります。

CRDTに関するWikipediaの記事 から:

OTは一般に複雑で、スケーラブルではありません

さまざまな種類の問題に適したさまざまな種類のCRDT(セット、カウンターなど)があります。テキスト編集用に設計されたものもあります。たとえば、Treedoc- 協調編集のための可換複製データ型

32
Andrejs