- Erläuterung des theoretischen Hintergrunds und der technischen Umsetzung von
cola, einem in Rust geschriebenen Text-CRDT (Conflict-free Replicated Data Type) für kollaborative Bearbeitung in Echtzeit
- CRDTs sind Datenstrukturen, die gleichzeitig an mehreren Orten repliziert und verändert werden können und auch ohne Koordination durch eine zentrale Instanz garantiert konvergieren
- Der Artikel gliedert sich in die Darstellung des Dokumentzustands und der Bearbeitungen, die ihn verändern, in Methoden zur effizienten Implementierung des Frameworks im Code sowie in Benchmark-Vergleiche zwischen
cola und anderen Rust-basierten CRDT-Bibliotheken
- Der Autor führt im Text das Konzept der „Anchors“ ein, das dazu dient, sowohl Einfügungen als auch Löschungen auf eine Weise zu spezifizieren, die Nebenläufigkeit ermöglicht
- Im Beitrag wird erläutert, wie sich konfliktbehaftete Einfügungen mit „Lamport timestamps“ behandeln lassen, indem nach dem Lamport-Zeitstempel absteigend sortiert wird
- Zur Behandlung von Löschungen stellt der Autor das Konzept der „tombstones“ vor. Als tombstoned markierte Zeichen gelten als gelöscht, bleiben aber weiterhin im Dokument erhalten
- Der Beitrag diskutiert außerdem, wie sich die Systemleistung durch den Einsatz von „G-trees“ (grow-only trees) verbessern lässt. G-trees können in beide Richtungen durchlaufen werden, wodurch wiederholte Bearbeitungen an derselben Cursor-Position sehr schnell sind
- Zum Abschluss vergleicht der Autor
cola in Benchmarks mit drei weiteren in Rust implementierten CRDTs: diamond-types, automerge und yrs. cola übertrifft alle drei sowohl in Upstream- als auch in Downstream-Richtung
- Der Autor weist darauf hin, dass
cola zwar derzeit die schnellste bekannte Implementierung eines Text-CRDT ist, für den Produktionseinsatz aber noch weitere Arbeit nötig ist, etwa Unterstützung für Undo/Redo und andere Funktionen
1 Kommentare
Hacker-News-Kommentare
slotmapzu verwenden, um Löschungen zu unterstützen, ohne sich Sorgen machen zu müssen, dass Indizes verschoben werden oder auf andere Werte zeigen