4 Punkte von xguru 2023-07-07 | 1 Kommentare | Auf WhatsApp teilen
  • Ein System, das SQLite-Datenbanken in Cloud-Speichern ablegt und Lesen und Schreiben ermöglicht, ohne die gesamte DB herunterzuladen
    • Unterstützt derzeit Azure Blob Storage und Google Cloud Storage
  • Verwendet das Block Cache VFS-Modul: arbeitet im daemonlosen Modus (Lesen/Schreiben) und im Daemon-Modus (nur Lesen)

Von GN⁺ zusammengefasster Inhalt

  • Das System „Cloud Backed SQLite“ (CBS) speichert Datenbanken in einem Cloud-Speicherkonto und ermöglicht Speicher-Clients den Zugriff, ohne die gesamte Datenbank herunterzuladen.
  • Mehrere Clients können gleichzeitig auf die Datenbank zugreifen, aber nur ein Client kann in die Datenbank schreiben.
  • CBS unterstützt derzeit Azure Blob Storage und Google Cloud Storage und könnte auch andere Cloud-Speichersysteme unterstützen.
  • SQLite-Datenbanken werden in Blöcke fester Größe aufgeteilt und im Cloud-Speichersystem gespeichert.
  • Das System besteht aus Grundbausteinen für die Verwaltung von Cloud-Speicher-Containern, einem Daemon-Prozess, der lokalen Zugriff auf entfernte Datenbanken bereitstellt, und einem VFS-Modul für den Zugriff auf Cloud-Datenbanken.
  • Um CBS zu verwenden, muss die Anwendung die erforderlichen C-Dateien und Header-Dateien bauen und linken sowie gegen libcurl und openssl linken.
  • Das System kann mit einer automatisierten Testsuite getestet werden.
  • Datenbanken können mit einem Kommandozeilen-Tool in ein Cloud-Speicherkonto hochgeladen werden.
  • Um auf eine in einem Cloud-Speicher abgelegte Datenbank zuzugreifen, müssen ein VFS erstellt, der Container verbunden, ein Datenbank-Handle geöffnet und ein SQL-Skript ausgeführt werden.
  • Das System stellt APIs bereit, um neue Cloud-Speichersysteme zu unterstützen und virtuelle Tabellen zu implementieren.
  • In diesem Artikel wird die Verwendung sicherer Container in Cloud-Speichersystemen behandelt.
  • Container können sicher oder unsicher verbunden werden; sichere Verbindungen verschlüsseln Daten mit AES-OFB.
  • Lokale Clients benötigen gültige Cloud-Speicher-Zugangsdaten, um vom Daemon-Prozess den Verschlüsselungsschlüssel zu erhalten.
  • In diesem Artikel werden die eingebauten Module „azure“ und „google“ für Cloud-Speichersysteme erwähnt.
  • Die CBS-API und die Kommandozeilen-Tools benötigen Modulspezifikation, Benutzernamen und Authentifizierungswert.
  • Dieser Artikel liefert Details zum Modul „azure“ sowie dazu, wie SAS-Tokens zur Authentifizierung erzeugt werden.
  • Das Modul „google“ benötigt eine Projekt-ID und ein Access Token, um CBS mit Google Cloud Storage zu verbinden.
  • In diesem Artikel wird gleichzeitiger Zugriff durch mehrere Clients sowie die Notwendigkeit erwähnt, Container per Polling auf Änderungen zu prüfen.
  • Blockcachevfs unterstützt drei PRAGMA-Anweisungen: bcv_upload, bcv_poll und bcv_client.
  • Die Schnittstelle für virtuelle Tabellen besteht aus den Tabellen bcv_container und bcv_database.
  • Die Tabelle bcv_container enthält Informationen über verbundene Container, und die Tabelle bcv_database enthält Informationen über die Datenbanken jedes Containers.
  • In diesem Artikel werden Struktur und Funktion verschiedener Tabellen der blockcachevfs-Datenbank behandelt.
  • Die Tabelle bcv_database enthält Informationen über lokale Änderungen an Datenbanken.
  • Die Tabelle bcv_http_log protokolliert HTTP-Anfragen, die vom VFS oder dem verbundenen Daemon ausgeführt wurden.
  • Die Tabelle bcv_kv ermöglicht Anwendungen, Daten in Cloud-Speicher-Container zu schreiben.
  • Die Tabelle bcv_kv_meta bietet schreibgeschützten Zugriff auf HTTP-Header des Cloud-Speicher-Servers.
  • Dieser Artikel bietet außerdem eine Kommandozeilen-Referenz für verschiedene Operationen in der blockcachevfs-Datenbank.
  • Der Daemon-Befehl ermöglicht es dem Prozess blockcachevfsd, als Server zu laufen und Verbindungen von Clients anzunehmen.
  • Der Daemon-Prozess unterstützt verschiedene Optionen für Konfiguration und Logging.

1 Kommentare

 
GN⁺ 2023-07-07
Hacker-News-Kommentare
  • Ein Entwickler teilt seine Erfahrungen damit, eine große SQLite-Datenbank in Chunks bereitzustellen und sie über HTTP-Range-Requests abzufragen
  • Erwähnt wird eine Bibliothek namens sql.js-httpvfs, die diesen Prozess unterstützt
  • Der Entwickler teilte eine 350 MB große SQLite-Datenbank in kleine Stücke auf und lud sie auf GitHub hoch
  • Es wird empfohlen, sich das Projekt anzusehen und es in der Konsole sowie im Netzwerk-Tab zu testen
  • Ein anderer Kommentator äußert Bedenken hinsichtlich Cache-Konsistenz, Parallelität, Netzwerkunterbrechungen und Authentifizierungsproblemen bei der Nutzung eines entfernten Datenspeichers
  • Als einfachere Lösung wird vorgeschlagen, die Datenbank in regelmäßigen Abständen in ein tmpfs-Dateisystem zu kopieren und anschließend in einen Objektspeicher zu kopieren
  • Hervorgehoben werden Vorteile wie Problemlösung, günstige und schnelle Dateikopien, keine externen Daemons, einfache globale Sperren, Thread-Sicherheit, keine Netzwerkunterbrechungen und externe Authentifizierung
  • Ein anderer Kommentator fragt sich, warum man mit SQLite, einer eingebetteten Datenbank, einen Cloud-Service betreiben würde, wenn PostgreSQL dasselbe Problem bereits löst
  • Es wird argumentiert, dass sich Latenz und Einfachheit verschlechtern, wenn man den Speicher in die Cloud verlagert
  • Ein anderer Kommentator fragt, ob es für SQLite einen Befehl gibt, der dem von pg_dump und mysqldump entspricht
  • Es wird erwähnt, dass das System derzeit Azure Blob Storage und Google Cloud Storage unterstützt, AWS aber möglicherweise ausgeschlossen ist
  • Ein anderer Kommentator ist sich nicht sicher, ob diese Funktion offiziell unterstützt wird oder ob es sich nur um den Fall „technisch möglich“ handelt
  • Es wird gefragt, ob man Datasette mit externem Cloud-Speicher betreiben kann
  • Ein anderer Kommentator äußert Bedenken dazu, sicherzustellen, dass immer nur ein Client gleichzeitig in die Datenbank schreibt
  • Es wird erwähnt, dass die VFS-Schicht von SQLite flexibel und einfach genug ist, um Cloud-Objektspeicher zu implementieren
  • Es wird angemerkt, dass Caching ein kniffliger Aspekt der Implementierung sein könnte
  • Ein anderer Kommentator zeigt sich verwirrt über die Idee, SQLite in der Cloud zu verwenden, statt eine andere relationale Datenbank zu nutzen, da SQLite ursprünglich für die lokale Nutzung entwickelt wurde.