1. ホーム
  2. algorithm

[解決済み] OTとCRDTの違い

2023-06-25 13:11:28

質問

Operational TransformとCRDTの主な違いについて、簡単に説明してもらえますか?

私の理解では、どちらも分散システムの異なるノードでデータが衝突することなく収束することを可能にするアルゴリズムです。

どのようなケースでどちらのアルゴリズムを使うのでしょうか? 私の理解では、OTは主にテキストに使われ、CRDTはより一般的で、より高度な構造を扱うことができますよね?

CRDTはOTより強力なのでしょうか?


私がこの質問をするのは、HTML ドキュメント用の共同エディターをどのように実装するか考えており、最初にどの方向に目を向けるべきかわからないからです。私は ShareJS プロジェクトと、ブラウザ上でリッチ テキスト コラボレーションをサポートする彼らの試みは contenteditables 要素でリッチテキストのコラボレーションをサポートする試みを見ました。ShareJS のどこにも、そのために CRDT を使用する試みが見当たりません。

Google DocsがOTを使っていて、リッチドキュメントのリアルタイム編集のためにかなりうまくいっていることも知っています。 Google が OT を使用することを選択したのは、当時 CRDT があまり知られていなかったからでしょうか。それとも、今日でも良い選択なのでしょうか?

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

どのように解決するのですか?

どちらのアプローチも、最終的な一貫性を提供するという点では似ています。違いは、それをどのように行うかにあります。1 つの見方としては

  • OTは 操作 . オペレーションはワイヤーを介して送信され、同時進行のオペレーションは受信されると変換されます。
  • CRDTは、それを行うために 状態 . 操作はローカルのCRDTに対して行われます。その状態はワイヤーを介して送信され、コピーの状態とマージされる。マージが何回行われるか、どのような順序で行われるかは問題ではなく、すべてのコピーが収束します。

確かに、OT は主にテキストに使用され、CRDT よりも古いものです。 研究 はそれを示しています。

文献にある多くのOTアルゴリズムが、作者が述べたのとは異なり その著者によって述べられたものとは異なり

言い換えれば、CRDTのマージは可換であるのに対し、OTの変換関数はそうでない場合があるということです。

より WikipediaのCRDTに関する記事 :

<ブロッククオート

OTは一般に複雑で非スケーラブルである。

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