Die Entwickler von SQLite arbeiten an einem experimentellen VFS-Modul namens CBS (Cloud Backed SQLite), das es ermöglicht, den Inhalt der Datenbank nicht in einer lokalen Datei, sondern in einem externen Cloud-Speicher zu speichern. Dabei kommt ein speziell für die externe Speicherung optimiertes Datenbankformat zum Einsatz, das eine dynamische Datenladung aus dem externen Speicher ermöglicht, ohne dass die gesamte Datenbank vorher auf das lokale System kopiert werden muss. Derzeit werden Azure Blob Storage und Google Cloud Storage als Cloud-Speicher unterstützt. Alle Anwendungen, die mit herkömmlichem SQLite arbeiten, können auf CBS umgestellt werden.
Das VFS-Modul kann sowohl im Hintergrund- als auch im Aktivmodus arbeiten. Im Hintergrundmodus wird ein Hintergrundprozess ständig im System ausgeführt, der den Zugriff auf eine externe Datenbank nur im Lesemodus ermöglicht, jedoch einen gemeinsamen Cache unterstützt, auf den verschiedene Prozesse gleichzeitig zugreifen können. Im Aktivmodus sind sowohl Lese- als auch Schreibzugriffe zulässig, wobei nur der lokale Cache des aktuellen Prozesses verwendet wird. Zu jedem Zeitpunkt kann nur ein Client Schreibzugriffe durchführen, und andere Clients sehen die geschriebenen Änderungen nicht, solange sie diese nicht ausdrücklich aus dem Cloud-Speicher anfordern. Zur Trennung verschiedener Schreibanforderungen wird das typisierte SQLite-Sperrsystem auf der Grundlage des WAL-Logs angewendet.
Den Entwicklern steht eine erweiterte C-API und eine Befehlszeilenschnittstelle zur Verfügung, die solche Operationen ermöglichen wie das Erstellen und Leeren von externem Speicher, das Hoch- und Herunterladen von Datenbanken in/aus externem Speicher, das Erstellen von Kopien von Datenbanken im externen Speicher, das Anzeigen der Liste der Datenbanken im Cloud-Speicher sowie das Löschen ungenutzter Blöcke aus dem Cloud-Speicher.
Die Entwickler des Projekts libSQL (ein erweiterter Fork von SQLite) haben eine serverseitige Version von SQLite - sqld - angekündigt, die den Betrieb einer gemeinsam genutzten Datenbank ermöglicht, auf die Clients über das PostgreSQL- oder HTTP-Protokoll zugreifen können. Beispielsweise können bestehende Client-Bibliotheken, die für PostgreSQL-Datenbanken erstellt wurden, verwendet werden, einschließlich der CLI-Schnittstelle psql. Der sqld-Server kann auch über eine API auf Basis des HTTP-Protokolls angesprochen werden, was die Integration mit Webanwendungen erleichtert. Der Code von sqld ist in Rust geschrieben und wird unter der MIT-Lizenz verbreitet.
Zu den Anwendungsbereichen von sqld gehören Backup, Replikation auf andere Systeme und der Zugang zu SQLite-Datenbanken in serverlosen Infrastrukturen, in denen kein permanenter Speicher vorhanden ist und die Pflege der Datenbank in einer lokalen Datei nicht möglich ist. In serverlosen Systemen kann die Datenbank, mit der sqld arbeitet, von anderen repliziert werden. Server. Um hohe Verfügbarkeit und Ausfallsicherheit zu gewährleisten, unterstützen wir die Integration mit mvSQLite (einer verteilten Version von SQLite, die auf FoundationDB basiert). Es gibt einen Modus zur aktiven Datensicherung, der durch regelmäßige Snapshots des Datenbankstatus und die Replikation von Änderungen aus dem WAL-Protokoll in einen mit Amazon S3 kompatiblen Cloud-Speicher umgesetzt wird.
Für Anwendungen steht eine SQLite-kompatible Bibliothek zur Verfügung, die über LD_PRELOAD geladen werden kann, um von der Speicherung von Daten in einer lokalen Datei auf die Arbeit über sqld umzusteigen. Erweiterungen für SQLite können ebenfalls geladen werden. Die Client-Bibliotheken sind für TypeScript, JavaScript, Rust, Go und Python vorbereitet. Mit einer an sqld gebundenen Datenbank kann gleichzeitig über die regulären SQLite-Tools gearbeitet werden, d. h. sqld fungiert als Erweiterung, um einen Netzwerkzugang zur Datenbank, Replikation und Backup bereitzustellen. Zum Beispiel: # Starten Sie den Server für die SQLite-Datenbank foo.db: sqld -d foo.db -p 127.0.0.1:5432 —http-listen-addr=127.0.0.1:8000 # Greifen Sie mit PostgreSQL-Tools auf die Datenbank zu: psql -q postgres://127.0.0.1 # Lokale Verbindung zur Datenbank mit SQLite-Tools: sqlite3 foo.db # Zugriff über HTTP: curl -s -d "{\"statements\": [\"SELECT * from databases;\"] }" \ http://127.0.0.1:8000
Abschließend sei das Projekt LiteFS erwähnt, das von der Firma Fly.io entwickelt wird. LiteFS ist ein FUSE-Modul, das die Arbeit mit einer gemeinsamen SQLite-Datenbank über mehrere Hosts organisiert. LiteFS repliziert den Zustand der Datenbank zwischen mehreren Systemen, indem es Schreiboperationen in die Datenbankdatei abfängt und diese Operationen auf andere Systeme überträgt. Dies erfolgt mithilfe einer Art Transaktionsmechanismus und speichert Transaktionen in einer separaten Datei im LTX-Format. Der Code von LiteFS ist in Go geschrieben und wird unter der Lizenz Apache 2.0 verbreitet.
Quelle: opennet.ru
