本文へスキップ

CRDTとは?

しーあーるでぃーてぃー

CRDTとは、複数のノードが独立して更新を行っても必ず同じ状態に収束するよう設計されたデータ構造で、分散システムにおける競合なしの同期を実現する技術です。

CRDT(Conflict-free Replicated Data Type、競合なし複製データ型)とは、複数サーバーやクライアントが互いに独立してデータを更新した場合でも、最終的に全ノードのデータが同じ状態に自動収束することを数学的に保証するデータ構造の総称です。

分散システムでは「CAP定理」として知られる制約から、ネットワーク分断が発生した場合には一貫性(Consistency)と可用性(Availability)のどちらかを犠牲にする必要があります。CRDTはこの問題に対して、「競合が起きない設計のデータ構造」を採用することで解決を試みます。すなわち、どのノードがどの順序で更新を受け取っても、マージの結果が常に同一になるよう演算を定義します。

CRDTの代表的な種類には次のようなものがあります。

  • G-Counter(増加カウンタ):各ノードが独立してカウントを増やせるカウンタ。ダウンロード数の集計などに使用。
  • OR-Set(Observed-Remove Set):要素の追加・削除が競合なく扱えるセット構造。
  • LWW-Register(Last-Write-Wins):タイムスタンプが最新の書き込みを勝者とするレジスタ。
  • RGA / YATA:テキスト文書の共同編集に特化したシーケンス型CRDT。

CRDTはリアルタイム共同編集ツール(NotionやFigma等の一部)、分散データベース(Apache Cassandraの一部機能)、Peer-to-Peerアプリケーションなど、オフライン対応や低レイテンシが求められる場面で採用されています。中央集権的なロック機構を必要としないため、高い可用性とスケーラビリティを両立できます。

使い方・例文

複数人が同時にオンラインドキュメントを編集する共同作業ツールや、スマートフォンがオフライン中にメモを更新しても、オンライン復帰後に他のデバイスと矛盾なく同期される仕組みにCRDTが活用されています。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語