Dezvoltatorii SQLite dezvoltă un modul VFS experimental, CBS (Cloud Backed SQLite), care permite stocarea conținutului bazei de date nu într-un fișier local, ci într-un spațiu de stocare în cloud extern. Pentru stocare se utilizează un format de bază optimizat special pentru stocarea externă, care permite încărcarea dinamică a datelor din spațiul de stocare extern pe măsură ce este necesar, fără a copia anterior întreaga bază de date în sistemul local. În prezent, din spațiile de stocare în cloud sunt acceptate Azure Blob Storage și Google Cloud Storage. Orice aplicații care suportă lucrul cu SQLite obișnuit pot fi migrate la CBS.
Modulul VFS poate funcționa în modul activ și în modul de fundal. În modul de fundal, un proces de fundal rulează constant în sistem, permițând accesarea bazei de date externe numai în modul de citire, dar suportând un cache comun, la care pot accesa diferite procese. În modul activ, este permisă citirea și scrierea, dar se folosește doar cache-ul local al procesului curent. Într-un moment dat, doar un singur client poate efectua scrieri, iar ceilalți clienți nu vor vedea modificările scrise până când nu le solicită explicit din spațiul de stocare în cloud. Pentru a separa diferitele cereri de scriere, se aplică un sistem de blocare tipic SQLite bazat pe jurnalul WAL.
Dezvoltatorii beneficiază de o API C extinsă și de o interfață de linie de comandă, permițând realizarea de operații precum crearea și golirea unui spațiu de stocare extern, încărcarea și descărcarea bazei de date în/din spațiul de stocare extern, crearea unei copii a bazei de date în spațiul de stocare extern, vizualizarea listei de baze de date din spațiul de stocare în cloud, eliminarea blocurilor neutilizate din spațiul de stocare în cloud.
Separat, dezvoltatorii proiectului libSQL (un fork extins al SQLite) au anunțat o variantă server a SQLite — sqld, care permite organizarea funcționării unei baze de date gestionate colectiv, la care clienții se conectează prin utilizarea protocolului PostgreSQL sau HTTP. De exemplu, bibliotecile client existente create pentru sistemele de gestionare a bazelor de date PostgreSQL pot fi utilizate pentru a se conecta la sqld, iar printre altele, interfața CLI psql. La serverul sqld se poate accesa și printr-o API bazată pe protocolul HTTP, facilitând integrarea cu aplicațiile web. Codul sqld este scris în limbajul Rust și este distribuit sub licența MIT.
Pentru utilizarea sqld, se menționează realizarea copiilor de rezervă, replicarea în alte sisteme și organizarea accesului la baza de date SQLite în infrastructuri serverless, unde nu există un stocaj permanent și nu se poate asigura păstrarea bazei de date într-un fișier local. În sistemele serverless, baza de date cu care lucrează sqld poate fi replicată din alte locații. servere. Pentru a asigura disponibilitate ridicată și rezistență la erori, se suportă integrarea cu mvSQLite (varianta distribuită a SQLite, care funcționează deasupra FoundationDB). Există un mod de menținere a unei copii de rezervă active, implementat prin salvarea periodică a instantaneelor cu starea bazei de date și replicarea modificărilor din jurnalul WAL în stocarea cloud compatibilă cu Amazon S3.
Pentru aplicații, se oferă o bibliotecă compatibilă cu SQLite, care poate fi încărcată prin LD_PRELOAD pentru a face tranziția de la stocarea datelor într-un fișier local la funcționarea prin sqld. Este posibilă încărcarea extensiilor pentru SQLite. Bibliotecile client sunt pregătite pentru TypeScript, JavaScript, Rust, Go și Python. Cu baza de date legată de sqld, se poate lucra simultan prin uneltele standard SQLite, adică sqld acționează ca un overlay pentru a oferi acces de rețea la baza de date, replicare și copii de rezervă. De exemplu: # Pornim serverul pentru baza de date SQLite foo.db: sqld -d foo.db -p 127.0.0.1:5432 —http-listen-addr=127.0.0.1:8000 # Accesăm baza de date folosind utilitarele PostgreSQL: psql -q postgres://127.0.0.1 # Ne conectăm local la baza de date folosind uneltele SQLite: sqlite3 foo.db # Accesăm prin HTTP: curl -s -d "{\"statements\": [\"SELECT * from databases;\"] }" http://127.0.0.1:8000
În concluzie, merită menționat proiectul LiteFS, dezvoltat de Fly.io. LiteFS este un modul FUSE pentru organizarea funcționării cu o bază de date SQLite comună pe mai multe gazde. LiteFS replică starea bazei de date între mai multe sisteme prin interceptarea operațiunilor de scriere în fișierul bazei de date și transmiterea acestor operațiuni către alte sisteme, folosind un mecanism similar cu tranzacțiile și păstrarea tranzacțiilor într-un fișier separat în format LTX. Codul LiteFS este scris în limbajul Go și este distribuit sub licența Apache 2.0.
Sursa: opennet.ro
