Für schnellere CRDTs optimieren
(josephg.com)- Ein Artikel, der erklärt, wie Probleme bestehender CRDT-Bibliotheken gefunden und behoben werden, um sie schneller zu machen
→ Test-Benchmark: Eingabe von 180.000 Zeichen, Löschen von 70.000 Zeichen, 100.000 Cursor-Bewegungen
→ 5000x schneller als Automerge (5 Minuten vs. 56 ms)
- Warum ist Automerge langsam?
→ Je größer das Dokument wird, desto größer und langsamer wird die interne baumbasierte Datenstruktur
→ Es nutzt stark ImmutableJS; funktional ist das gut, aber es ist langsam und verbraucht viel Speicher
→ Jedes eingegebene Zeichen wird als separates Item verarbeitet
→ Automerge arbeitet derzeit separat an einer Rust-Version mit verbesserter Performance
- Die Yjs-Bibliothek ist deutlich schneller als Automerge
→ Verbesserte Datenstruktur
- Diamond Types: eine auf Rust basierende CRDT-Implementierung
→ Durch den Wechsel zu Rust und die Verbesserung der Datenstruktur wie bei Yjs wurde sie schneller gemacht
→ Statt einer Linked List wird ein Range Tree verwendet
→ Bei der Ausführung als Wasm 3x schneller als String-Änderungen in JS (0,19 s, 1500x schneller als Automerge)
→ Bei nativer Ausführung in Rust 0,056 s und damit 5000x schneller
Anhang A - Was sollte ich verwenden, wenn ich in meiner App CRDT einsetzen möchte?
-
Wenn man ein dokumentbasiertes Kollaborationstool baut, „Yjs empfohlen“. Gute Performance, geringer Speicherverbrauch. Wird voraussichtlich noch schneller
-
Natürlich ist auch Automerge hervorragend. Wahrscheinlich wird es dieses Jahr noch schneller
-
Diamond ist wirklich schnell, muss aber noch viele Funktionen hinzufügen
-
Wenn man statt Dokumentsemantik eher DB-Semantik möchte, wird trotz OT-Basis ShareDB empfohlen
-
Redwood bleibt spannend
2 Kommentare
Dieser Artikel ist der neueste Beitrag von Joseph Gentle, einem Entwickler von Google Wave und Autor des unten stehenden Artikels. Es ist hilfreich, zuerst den folgenden Artikel zu lesen.
Auch der Beitrag von Raph Levien, dem Entwickler von Xi Editor, ist lesenswert.
https://github.com/xi-editor/xi-editor/…