SQLite-udviklerne arbejder på et eksperimentelt VFS-modul CBS (Cloud Backed SQLite), der muliggør lagring af databaseindhold ikke i en lokal fil, men i et eksternt cloudlager. Der bruges et særligt optimeret format til ekstern lagring, der gør det muligt at hente data fra det eksterne lager dynamisk, efter behov, uden at skulle kopiere hele databasen til det lokale system først. I øjeblikket understøttes Azure Blob Storage og Google Cloud Storage som cloudlagringsløsninger. Enhver applikation, der understøtter standard SQLite, kan overgå til brugen af CBS.
VFS-modulet kan arbejde i både baggrunds- og aktiv tilstand. I baggrundstilstand kører der konstant en baggrundsproces i systemet, der muliggør adgang til den eksterne database kun i læsetilstand, men som understøtter en delt cache, som forskellige processer kan få adgang til sammen. I aktiv tilstand er både læsning og skrivning tilladt, men der bruges kun den lokale cache for den aktuelle proces. På ethvert tidspunkt kan kun én klient foretage skrivninger, og andre klienter vil ikke se de gemte ændringer, før de eksplicit anmoder om dem fra cloudlageret. For at adskille forskellige skriveanmodninger anvendes SQLite's typiske låsesystem baseret på WAL-loggen.
Udviklere får adgang til en udvidet C API og kommandolinjegrænseflade, der muliggør udførelse af operationer såsom oprettelse og ryddelse af eksterne lagre, indlæsning og udlæsning af databaser i/ud af eksterne lagre, oprettelse af kopier af databaser i det eksterne lager, visning af en liste over databaser i cloudlageret og fjernelse af ubrugte blokke fra cloudlageret.
Separat har udviklerne af projektet libSQL (en udvidet fork af SQLite) annonceret en serverversion af SQLite - sqld, der muliggør arbejdet med en delt database, hvortil klienter kan forbindes via PostgreSQL-protokollen eller HTTP. For eksempel kan eksisterende klientbiblioteker, der er oprettet til PostgreSQL-databaser, og blandt andet CLI-grænsefladen psql anvendes til at oprette forbindelse til sqld. Serveren sqld kan også tilgås via et API baseret på HTTP-protokollen, hvilket forenkler integrationen med webapplikationer. Koden til sqld er skrevet i Rust og distribueres under MIT-licensen.
Anvendelsesområderne for sqld inkluderer sikkerhedskopiering, replikering til andre systemer og organisering af adgang til SQlite-databaser i serverløse infrastrukturer, hvor der ikke er noget permanent lager og det er umuligt at føre databasen i en lokal fil. I serverløse systemer kan databasen, som sqld arbejder med, replikeres fra andre. servere. For at sikre høj tilgængelighed og modstandsdygtighed over for fejl understøttes integration med mvSQLite (den distribuerede version af SQLite, der kører oven på FoundationDB). Der er en aktiv sikkerhedskopieringsfunktion, realiseret gennem periodisk gemning af snapshots af databasens tilstand og replikering af ændringer fra WAL-loggen til et cloud-lager, der er kompatibelt med Amazon S3.
For applikationer tilbydes et kompatibelt bibliotek med SQLite, som kan indlæses via LD_PRELOAD for at overgå fra at gemme data i en lokal fil til at arbejde gennem sqld. Det er muligt at indlæse udvidelser til SQLite. Klientbibliotekerne er forberedt til TypeScript, JavaScript, Rust, Go og Python. Med databasen, der er knyttet til sqld, kan man samtidig arbejde med det normale værktøj til SQLite, dvs. sqld fungerer som et overlay for at give netværksadgang til databasen, replikering og sikkerhedskopiering. For eksempel: # Start serveren for SQLite-database foo.db: sqld -d foo.db -p 127.0.0.1:5432 —http-listen-addr=127.0.0.1:8000 # Tilgår databasen via PostgreSQL-værktøjer: psql -q postgres://127.0.0.1 # Tilgår lokalt databasen ved hjælp af SQLite-værktøjet: sqlite3 foo.db # Tilgår via HTTP: curl -s -d "{\"statements\": [\"SELECT * from databases;\"] }" \ http://127.0.0.1:8000
Afslutningsvis kan projektet LiteFS, udviklet af Fly.io, nævnes. LiteFS fungerer som et FUSE-modul til organisering af arbejdet med én fælles SQLite-database på flere værter. LiteFS replikere databasens tilstand mellem flere systemer ved at opfange skriveoperationerne til databasen, og transmitterer disse operationer til andre systemer, ved hjælp af en form for transaktionsmekanisme og gemmer transaktioner i en separat fil i LTX-format. Koden til LiteFS er skrevet i Go og distribueres under Apache 2.0-licensen.
Kilde: opennet.ru
