- Litestream VFS ist eine pluginartige Erweiterung, mit der sich SQLite-Datenbanken direkt aus Objektspeichern (z. B. S3) lesen und abfragen lassen
- Ermöglicht sofortige Abfragen aus Remote-Backup-Dateien sowie Point-in-Time Recovery (PITR), ohne die gesamte Datenbank herunterzuladen
- Verwendet intern das LTX-Format, um Mengen geänderter Seiten effizient zu verwalten, und verbessert die Wiederherstellungsgeschwindigkeit durch Compaction, bei der doppelte Seiten übersprungen werden
- Nutzt die VFS-Schnittstelle von SQLite, um nur Lesevorgänge abzufangen; Schreibvorgänge übernimmt der bestehende Litestream-Prozess
- Bietet durch Backups im Sekundentakt und Indexaktualisierungen eine nahezu Echtzeit-Replik, die schnelle Abfragen in Cloud-Umgebungen unterstützt
Überblick über Litestream VFS
- Litestream VFS ermöglicht es SQLite, eine Objektspeicher-URL direkt als Datenquelle zu verwenden
- Aktivierung in der SQLite-Shell mit den Befehlen
.load litestream.so und .open file:///my.db?vfs=litestream
- Danach können Abfragen auf Basis der in S3 gespeicherten Backup-Dateien ausgeführt werden
- Direkte Abfragen aus Remote-Backups sind möglich, ohne die gesamte Datenbank herunterladen zu müssen
- Im Beispiel wird mit der Abfrage
SELECT * FROM sandwich_ratings sofort ein Teil der in S3 gespeicherten Daten eingesehen
Point-in-Time Recovery (PITR)
- Mit dem Befehl
PRAGMA litestream_time = '5 minutes ago'; lässt sich der Datenzustand zu einem bestimmten Zeitpunkt abfragen
- Es kann eine relative Zeit (
5 minutes ago) oder eine absolute Zeit (2000-01-01T00:00:00Z) angegeben werden
- Dadurch ist sofortige Point-in-Time Recovery (PITR) direkt auf SQL-Ebene möglich
- Im Beispiel wird nach einem fehlerhaften
UPDATE der Zustand von vor 5 Minuten wiederhergestellt und die korrekten Daten geprüft
LTX-Format und Datenkomprimierung
- Litestream v0.5 integriert das Format LTX (Litestream Transaction eXchange)
- Frühere Versionen übertrugen vollständige SQLite-Seiten, während LTX nur geordnete Mengen von Seiten überträgt
- Der Kern von LTX ist die Funktion „compaction“, bei der bei der Wiederherstellung nur die neueste Version jeder Seite ausgewählt wird
- Beispiel: Aus
1 2 3 5 3 5 4 5 5 werden nur das jeweils letzte 5, 4, 3, 2 und 1 verwendet
- LTX kann nicht nur die gesamte Datenbank, sondern auch Mengen von LTX-Dateien komprimieren, wodurch PITR-Wiederherstellung möglich wird
- Im Trailer der LTX-Dateien ist ein Offset-Index für jede Seite enthalten, sodass
- nur die benötigten Seiten per S3-Range-Request gelesen werden können, ohne die gesamte Datei herunterzuladen
Implementierung des VFS
- Litestream VFS wird über die VFS (Virtual File System)-Schnittstelle von SQLite implementiert
- VFS ist eine Plugin-Struktur, die die Betriebssystemzugriffsschicht von SQLite abstrahiert
- Litestream VFS verarbeitet nur Lesevorgänge (Read), während Schreibvorgänge (Write) vom bestehenden Litestream-Prozess übernommen werden
- Wenn SQLite eine Seite liest, führt das VFS statt eines Byte-Offsets eine Zuordnung auf Basis des Seitenindex durch
- Im Index werden Dateiname, tatsächlicher Offset und Seitengröße ermittelt, dann wird genau dieser Block über den Range-Header der S3-API heruntergeladen
- Ein LRU-Cache hält häufig genutzte „heiße Seiten“ im Speicher und minimiert so die Zahl der S3-Aufrufe
Echtzeit-Replikation und Performance
- Litestream führt einmal pro Sekunde ein Backup auf L0-Ebene aus
- Das VFS pollt den S3-Pfad regelmäßig und aktualisiert den Index schrittweise
- Dadurch entsteht eine nahezu Echtzeit-Replik (near-realtime replica)
- Sofort nutzbar, ohne die gesamte Datenbank streamen zu müssen
- Diese Architektur sorgt für schnellen Start und kurze Wiederherstellungszeiten
Einsatz und Bedeutung
- Litestream bewahrt alle Zustände der Datenbank mit Sekundenauflösung als Backups auf
- Bei versehentlichen
DELETE- oder UPDATE-Operationen ist eine sofortige Wiederherstellung auf den gewünschten Zeitpunkt möglich
- Durch die direkte Abfrage aus dem Objektspeicher funktioniert das System auch in ephemeren Serverumgebungen schnell
- Ohne komplexe Mechanismen nutzt es die Standardfunktionen von SQLite und bietet so ein einfaches, aber leistungsstarkes Backup- und Recovery-System
- Wird auch in internen APIs von Fly.io verwendet und kann stabil in Produktionsumgebungen betrieben werden
Noch keine Kommentare.