Les développeurs de SQLite développent un module VFS expérimental appelé CBS (Cloud Backed SQLite), qui permet de stocker le contenu de la base de données non pas dans un fichier local, mais dans un stockage cloud externe. Un format de base de données spécialement optimisé pour le stockage externe est utilisé, permettant de charger les données à partir du stockage externe de manière dynamique au besoin, sans avoir à copier préalablement l'ensemble de la base de données sur le système local. Actuellement, les stockages cloud supportés sont Azure Blob Storage et Google Cloud Storage. Toute application prenant en charge le fonctionnement avec un SQLite classique peut être migrée vers CBS.
Le module VFS peut fonctionner en mode actif et en mode arrière-plan. En mode arrière-plan, un processus en arrière-plan s'exécute en continu dans le système, permettant d'accéder à la base de données externe uniquement en mode lecture, mais supportant un cache commun auquel différents processus peuvent accéder. En mode actif, la lecture et l'écriture sont autorisées, mais seul le cache local du processus actuel est utilisé. À tout moment, un seul client peut effectuer une écriture, et les autres clients ne verront pas les modifications enregistrées tant qu'ils ne les demanderont pas explicitement à partir du stockage cloud. Pour distinguer les différentes demandes d'écriture, un système de verrouillage de type SQLite basé sur le journal WAL est appliqué.
Les développeurs ont à leur disposition une API C étendue et une interface en ligne de commande pour effectuer des opérations telles que la création et le nettoyage du stockage externe, le chargement et le déchargement de la base de données depuis/vers le stockage externe, la création d'une copie de la base de données dans le stockage externe, la visualisation de la liste des bases de données dans le stockage cloud, et la suppression des blocs inutilisés du stockage cloud.
Les développeurs du projet libSQL (un fork étendu de SQLite) ont également annoncé une version serveur de SQLite — sqld — qui permet d'organiser le travail d'une base de données partagée, à laquelle les clients se connectent via un protocole PostgreSQL ou HTTP. Par exemple, des bibliothèques clientes existantes conçues pour les bases de données PostgreSQL peuvent être utilisées pour se connecter à sqld, ainsi que, entre autres, l'interface CLI psql. Le serveur sqld peut également être accessible à l'aide d'une API basée sur le protocole HTTP, facilitant ainsi l'intégration avec les applications web. Le code sqld est écrit en Rust et est distribué sous licence MIT.
Les applications de sqld incluent la sauvegarde, la réplication vers d'autres systèmes et l'organisation de l'accès à une base de données SQLite dans des infrastructures sans serveur où aucun stockage permanent n'est disponible et où il est impossible de maintenir une base de données dans un fichier local. Dans les systèmes sans serveur, la base de données utilisée par sqld peut être répliquée depuis d'autres. serveurs. Pour garantir une haute disponibilité et une résilience aux pannes, une intégration avec mvSQLite (une version distribuée de SQLite fonctionnant sur FoundationDB) est supportée. Un mode de sauvegarde active est mis en œuvre via la sauvegarde périodique de snapshots de l'état de la base de données et la réplication des modifications à partir du journal WAL vers un stockage cloud compatible avec Amazon S3.
Pour les applications, une bibliothèque compatible avec SQLite est fournie, qui peut être chargée via LD_PRELOAD pour passer du stockage de données dans un fichier local à l'utilisation de sqld. Le chargement des extensions pour SQLite est possible. Des bibliothèques clients sont disponibles pour TypeScript, JavaScript, Rust, Go et Python. Une base de données liée à sqld peut être accessible en même temps à l'aide des outils standards de SQLite, c'est-à-dire que sqld sert d'extension pour fournir un accès réseau à la base de données, ainsi que pour la réplication et la sauvegarde. Par exemple : # Démarrer le serveur pour la base de données SQLite foo.db: sqld -d foo.db -p 127.0.0.1:5432 —http-listen-addr=127.0.0.1:8000 # Accéder à la base de données avec des outils PostgreSQL : psql -q postgres://127.0.0.1 # Se connecter localement à la base de données avec les outils SQLite : sqlite3 foo.db # Accéder via HTTP : curl -s -d "{\"statements\": [\"SELECT * from databases;\"] }" \ http://127.0.0.1:8000
Enfin, il convient de mentionner le projet LiteFS, développé par Fly.io. LiteFS est un module FUSE permettant d'organiser le travail avec une base de données SQLite partagée entre plusieurs hôtes. LiteFS réplique l'état de la base de données entre plusieurs systèmes en interceptant les opérations d'écriture dans le fichier de la base de données et en transmettant ces opérations vers d'autres systèmes, en utilisant un mécanisme de transactions similaire et en sauvegardant les transactions dans un fichier séparé au format LTX. Le code de LiteFS est écrit en Go et est distribué sous la licence Apache 2.0.
Source : opennet.ru
