【しーあーるでぃーてぃー】

CRDT(Conflict-free Replicated Data Type) とは?

最終更新:
💡 離れて編集したメモを、決めたルールでそろえる

複数の複製で独立して更新し、必要な更新を同期すると同じ状態へ収束するよう設計されたデータ型。統合の規則と同期の条件があり、利用者の意図や業務上のルールまで自動的に正しくなるわけではありません。

📌 このページのポイント
CRDT:決めたルールでそろえる例:追加だけできる集合複製Aりんご複製Bみかん互いの状態を統合どちらも「りんご・みかん」同じ要素は、何度届いても増やさない更新を届ける仕組みは必要
追加専用の集合の例です。削除・文章編集などには、それぞれに適した規則と同期条件が必要です。
ひよこ ひよこ
CRDTって、何をするもの?
ペンギン先生 ペンギン先生
複数の場所にあるデータの複製を、それぞれ更新してからそろえるためのデータ型だよ。同じ更新を受け取った複製が、決めた規則によって同じ状態になるよう設計されているんだ。
ひよこ ひよこ
具体例で教えて!
ペンギン先生 ペンギン先生
図は、追加だけできる集合の例だよ。Aが「りんご」、Bが「みかん」を追加して、互いの状態を統合すると、どちらも「りんご・みかん」になる。同じ要素を何度統合しても増やさない規則なんだ。削除や文章編集には、それに対応した別の規則が必要だよ。
ひよこ ひよこ
更新はどんな順序で届いてもいいの?
ペンギン先生 ペンギン先生
方式によるよ。状態を送って統合する方式と、操作を送る方式があるんだ。後者では、操作を確実に届けることや因果順序を守ることが必要な設計もある。「全部の操作を、どんな順序でも自由に扱える」とは言えないよ。
ひよこ ひよこ
中央のサーバーやネット接続は不要なの?
ペンギン先生 ペンギン先生
毎回ほかの複製に確認しなくても更新できるのが利点だよ。ただし、同じ状態へそろえるには更新を届ける必要がある。中央サーバーを使う構成も選べるし、切断したままの相手へ変更が勝手に伝わるわけではないんだ。
ひよこ ひよこ
同時編集なら、全部うまく合体する?
ペンギン先生 ペンギン先生
データが同じになることと、文章や業務の意味が正しいことは別だよ。重複予約などの業務ルールには追加の設計が必要な場合がある。具体的な利用例は共同編集ライブラリのAutomergeで、オフラインの変更を後から同期できるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「CRDT」って出てきたら「別々に更新したデータを、決めたルールでそろえる仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Conflict-free Replicated Data Type」 = 競合の解決規則を持つ複製データ型
💬 Replicatedは複製された、Data Typeはデータ型だよ。Conflict-freeは、同時更新を所定の規則で扱って複製を収束させる性質を表すんだ。

参考資料

← 用語集にもどる