CRDT
"Conflict-free Replicated Data Type" コンフリクトしない複製可能なデータ
Creating a Collaborative Editor seanchas_t.icon
https://crdt-sequence.herokuapp.com/
データ構造がわかりやすい https://gyazo.com/45a4d0c43ef201d6e4b31642243114db
JSONのobjectはCRDTとみなせる? seanchas_t.icon
マージ時に誰のデータをを最優先にすればいんだろう
arrayは、index数値をkeyとした (小数を許せば全体を変更せずに途中に挿入も可能) objectにすればCRDTになりそう
↑のテキストデータフォーマットと同じように
index数値は小数点を使うことがある
浮動小数点を使うと精度の問題が発生するので、配列をキーに使うとよい
https://gyazo.com/3e89a7f7cabea47c390f0b45ef13bee2
https://conclave-team.github.io/conclave-site/
記事中のCRDTサーバの実装がまんまエコーサーバと話題に
CRDT (Conflict-free Replicated Data Type)を15分で説明してみる
このビジュアライズツールわかりやすい
https://text-crdt-compare.surge.sh/
https://gyazo.com/8c0d3874adfce734d42a57c452178934
ライブラリ
https://github.com/yjs/yjs
アルゴリズム https://github.com/yjs/yjs#yjs-crdt-algorithm
deleteされた場合は ItemDeleted という特別なデータを入れておくらしい
tombstone
削除フラグは立てられるが、それ自体を消去することはできない
CRDTでのトランザクションどうするんだろう
yjs に transact(function(Transaction):void [, origin:any]) ってありますね
single change event が出るのか
CRDTは共同編集だけではなく、分散フレームワークの文脈で出てくる
Riak
Roshi
Akka Distributed Data