Ein neuer Ansatz für Edge-Replikation
- Datensynchronisierung ist ein schwierigeres Problem, als es auf den ersten Blick scheint. Bestehende Lösungen teilen sich meist in zwei Ansätze: Entweder wird der gesamte Datensatz mit dem Client synchronisiert, oder es werden logische Änderungen verfolgt.
- Graft wurde entwickelt, um diese Probleme zu lösen, und ist eine Open-Source-Storage-Engine, die einfache physische Replikation mit effizienter logischer Replikation kombiniert.
Faule Synchronisierung: Im gewünschten Tempo synchronisieren
- Graft erlaubt Clients zu wählen, wann sie synchronisieren, und eignet sich damit für Edge-Umgebungen, die nur zeitweise mit dem Netzwerk verbunden sind.
- Der Server liefert einen Index der Seiten, die sich seit dem letzten Snapshot des Clients geändert haben, und der Client kann selektiv nur die benötigten Daten abrufen.
Partielle Synchronisierung: Nur synchronisieren, was benötigt wird
- In Edge-Umgebungen kann nicht der gesamte Datensatz heruntergeladen werden, daher unterstützt Graft partielle Synchronisierung, bei der nur die benötigten Seiten selektiv abgerufen werden.
- Graft kann allgemeine Vorhersagealgorithmen und Domänenwissen nutzen, um benötigte Seiten im Voraus zu holen.
Edge: Synchronisierung nah am Einsatzort
- Graft stellt Daten über Edge-Server weltweit bereit und sorgt so unabhängig vom Standort der Nutzer für geringe Latenz und hohe Reaktionsfähigkeit.
- Die Clients sind leichtgewichtig aufgebaut und lassen sich einfach in Browser, mobile Apps und serverlose Umgebungen integrieren.
Konsistenz: Sichere Synchronisierung
- Graft bietet ein starkes Konsistenzmodell, das Konflikte zwischen Clients sicher behandelt.
- Über ein Snapshot-Isolation-Modell erhalten Clients eine konsistente Sicht auf die Daten, während Schreibvorgänge strikt serialisiert werden.
Was lässt sich mit Graft bauen?
- Graft bietet eine starke Grundlage für verschiedenste Edge-native Anwendungen.
- Möglich sind Offline-First-Apps, plattformübergreifende Daten, zustandslose Lesereplikate und die Replikation beliebiger Daten.
Graft-SQLite-Erweiterung (libgraft)
libgraft ist eine native Erweiterung für SQLite, mit der Clients nur den tatsächlich genutzten Teil einer Datenbank replizieren können, sodass SQLite auch in ressourcenbeschränkten Umgebungen ausgeführt werden kann.
- Sie bietet Funktionen wie asynchrone Replikation, faule partielle Replikation, Snapshot Isolation und Point-in-Time Recovery.
So kann man mitmachen
- Graft wird auf GitHub entwickelt und freut sich über Beiträge aus der Community.
- Man kann dem Discord beitreten oder per E-Mail Feedback geben.
- Außerdem kann man sich in die Warteliste für den Managed Service von Graft eintragen.
Roadmap
- Graft befindet sich noch in Entwicklung; geplant sind unter anderem Unterstützung für WebAssembly, Integration mit SQLSync und Support für verschiedene Client-Bibliotheken.
- Ebenfalls vorgesehen sind geringere Schreiblatenz, Garbage Collection, Authentifizierung und Autorisierung, Volume Forking sowie Konfliktbehandlung.
Vergleich mit anderen SQLite-Replikationslösungen
- Graft hat im Vergleich zu mvSQLite, Litestream, cr-sqlite, Cloudflare Durable Objects, Cloudflare D1, Turso & libSQL, rqlite & dqlite und Verneuil eigene besondere Vorteile.
- Zu den wichtigsten Unterscheidungsmerkmalen zählen partielle Replikation, Unterstützung beliebiger Datenstrukturen und effiziente Replikation am Edge.
1 Kommentare
Hacker News-Kommentare
Das Konsistenzmodell ist unklar
Der Autor von Graft bedankt sich
Das Konsistenzmodell wird als ähnlich zu git verstanden
Wenn ein Client Graft abruft, kann er genau erkennen, was sich geändert hat
Es werden keine Implementierungsdetails erwähnt
Die Nutzung von VFS wird als interessanter „Hack“ angesehen
Das Projekt mit dem Leap-Algorithmus ist sehr interessant
Es kann Probleme geben, wenn mobile Clients eine langsame Verbindung haben
Der Ansatz, Seiten als grundlegende Synchronisierungseinheit zu verwenden, ist interessant
Es ist ein sehr anspruchsvolles Problem