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