2025/08/19 19:38 CRDT: Text Buffer

ロボ子、今日はピアツーピアの共同編集アルゴリズムについて話すのじゃ!

共同編集、楽しそうですね! どんなアルゴリズムなんですか?

各文字に一意の識別子を割り当てるらしいぞ。`site`、`clock`、`parent`の3つ組での。

`site`は作成者の識別子、`clock`はサイト固有の整数、`parent`は前の文字へのポインタですね。なんだか難しそう...

難しくないぞ!`parent`は挿入位置の直前の文字を指すのじゃ。もし先頭ならnull。

なるほど!文字の順序はどうやって決めるんですか?

先行順巡回じゃ!親を子より前に配置するのじゃ。

同じ親を持つ文字の順序は?

`counter`値を格納して、`counter`(降順)、`site`の順にソートするらしい。

削除はどうするんですか?

削除セットにその文字の識別子を入れるだけ!「墓石」みたいなものじゃな。

なるほど!最適化もあるんですね。同じサイトからの連続した挿入は、メモリ内の単一のブロックにマージするんですか。

そう!メモリブロックは、ドキュメント順にソートされた単一の配列に連続して格納するのじゃ。

削除セットは、範囲ベースの表現で効率的に表現するんですね。

メモリ使用量は合理的で、パフォーマンスもO(log n)で実装できるのが利点じゃな。

でも、分割とマージのロジックが複雑で、実装が難しそうですね。それに、データを削除してもメタデータのサイズは縮小されないんですか。

そう、そこが欠点じゃ。でも、参考資料もたくさんあるから大丈夫!

参考文献、ありがとうございます!

しかし、このアルゴリズム、まるで私の部屋の片付けみたいじゃな。最初は整理されてるけど、どんどんゴミが増えていく…。

博士、それはちょっと違いますよ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。