- Rustで書かれた、
cola というリアルタイム共同編集向けテキストCRDT(Conflict-free Replicated Data Type)の理論的背景と技術的実装についての説明
- CRDTは、複数のサイトで同時に複製・変更できるデータ構造であり、中央権限による調整なしでも収束が保証される
- 記事の内容は、文書の状態表現とそれを変換する編集、コード内でフレームワークを効率的に実装する方法、そして
cola と他のRust製CRDTライブラリとのベンチマーク比較に分かれている
- 著者はテキストにおける
Anchors という概念を紹介しており、これは並行性を可能にする形で挿入と削除の両方を指定するために使われる
- 論文では、
Lamport timestamps を使用し、Lamport timestamp に従って降順に並べることで競合する挿入を処理する方法について論じている
- 著者は削除を処理するために
tombstones という概念を導入している。tombstone化された文字は削除済みとしてマークされるが、文書内には保持され続ける
- 論文では、
G-trees(grow-only trees)の利用によってシステム性能を向上させる方法について論じている。G-trees は双方向に走査できるため、同じカーソル位置での反復的な編集が非常に高速である
- 著者は、
cola と Rust で実装された他の3つのCRDT、diamond-types、automerge、yrs とのベンチマーク比較で論文を締めくくっている。cola はアップストリームとダウンストリームの両方向で他の3つを上回っている
- 著者は、
cola は現時点で知られている中で最速のテキストCRDT実装だが、本番利用に向けてはまだ取り組むべき作業があると指摘している。たとえば、undo/redo やその他の機能のサポートなど
1件のコメント
Hacker Newsの意見
slotmapという crate を使って、インデックスが移動したり別の値を指したりすることを心配せずに削除をサポートする案が提案されている