SQL senza server
SQLite è un motore di database relazionale che funziona senza un processo server separato. Creato da D. Richard Hipp nel 2000, SQLite archivia un intero database — tabelle, indici, viste e trigger — in un singolo file ordinario sul filesystem. L’applicazione accede al database attraverso chiamate di funzione a una libreria C linkata direttamente nel processo, senza socket, senza protocolli di rete, senza autenticazione.
La versione corrente, SQLite 3, supporta un sottoinsieme ampio dello standard SQL-92: query complesse con JOIN, subquery, GROUP BY, viste e trigger sono supportate nativamente. Il motore è progettato per essere compatto — l’intera libreria compilata occupa meno di 250 KB.
Architettura embedded
L’architettura di SQLite inverte il modello tradizionale dei database relazionali. In un sistema come PostgreSQL o MySQL, il client invia query attraverso una connessione di rete a un processo server che gestisce storage, concorrenza e transazioni. In SQLite, tutti questi componenti risiedono all’interno della libreria stessa, eseguita nello stesso spazio di indirizzamento dell’applicazione.
Questo modello elimina i costi di latenza della comunicazione inter-processo e semplifica radicalmente il deployment: distribuire un’applicazione con SQLite significa distribuire un singolo file eseguibile e un singolo file di database. Non esiste un servizio da configurare, avviare o monitorare.
Conformità ACID
Nonostante l’assenza di un server dedicato, SQLite garantisce la conformità ACID — Atomicity, Consistency, Isolation, Durability. Le transazioni sono implementate attraverso un meccanismo di journal file: prima di modificare il database, SQLite scrive le pagine originali in un file di journal separato. In caso di crash, il journal viene utilizzato per ripristinare lo stato consistente del database al riavvio.
Il modello di locking è basato sull’intero file: un solo scrittore alla volta può operare sul database, mentre i lettori possono accedere contemporaneamente. Questo vincolo rende SQLite inadatto a scenari con molti scrittori concorrenti, ma perfettamente adeguato per applicazioni single-user o a basso livello di concorrenza in scrittura.
Dove si usa SQLite
La portabilità e l’assenza di amministrazione rendono SQLite adatto a una gamma di contesti che un database client-server tradizionale non può servire. I dispositivi embedded — telefoni, apparati di rete, strumenti di misura — utilizzano SQLite come storage strutturato quando le risorse non permettono l’esecuzione di un processo server separato.
Le applicazioni desktop lo adottano per gestire configurazioni, cache e dati locali. I browser web lo utilizzano internamente per cookie, cronologia e storage locale. I framework di testing lo impiegano come database in-memory per eseguire test senza dipendenze esterne.
SQLite ha reso SQL un formato di file. Questa è forse la sua innovazione più significativa: non un’alternativa ai database server, ma una categoria del tutto nuova di storage relazionale portabile.
