SQLite: introduzione al database SQL più usato

8 giugno 2018

SQLite è un progetto nato dalla mente di D. Richard Hipp, con uno scopo ben preciso: rendere facile ed immediato il processo di deployment di un database SQL. Le scelte progettuali che caratterizzano SQLite lo hanno reso praticamente compatibile con qualunque dispositivo di calcolo e ciò ha certamente contribuito a fare di esso il database SQL più utilizzato al mondo.

Scopo di tale lezione sarà quello di evidenziare sia le peculiarità progettuali che le funzionalità offerte da SQLite. Inoltre, benchè SQLite possa essere utilizzato praticamente in qualunque tipo di applicazione reale, sia essa sviluppata su un sistema desktop, mobile o embedded, per comodità la lezione riporterà una breve serie di casi pratici dove l’utilizzo di SQLite NON è consigliato, e dove concorrenti come MySQL o PostgreSQL potrebbero rivelarsi una scelta più azzeccata. Nelle successive pagine di questo articolo, vedremo più da vicino come utilizzare praticamente le API di SQLite nel web, ed utilizzarlo congiuntamente a PHP.

Storia di SQLite

SQLite è stato rilasciato nel lontano anno 2000, come appartenente al “pubblico dominio” e con licenza “open-source”. Questo significa che chiunque può utilizzare il codice sorgente e/o i file binari distribuiti dal produttore, crearne tante copie e senza alcuna restrizione di utilizzo. Tuttavia, come specificato da Richard Hipp, il progetto non è “open contribution”. Questa volontà nasce dall’esigenza di impedire a sviluppatori sconosciuti di contaminare il progetto con codice proprietario e/o licenze d’utilizzo.

La documentazione ufficiale di SQLite viene costantemente aggiornata ed è disponibile sul sito web ufficiale. Va anche notato che SQLite è un progetto a lungo termine, e secondo quanto indicato il supporto non terminerà prima del 2050.

SQLite è una libreria C che implementa (quasi) tutte le funzionalità di altri DBMS relazionali blasonati come MySQL, PosgreSQL, ecc. Una differenza sostanziale con gli altri DBMS è che SQLite è “embedded”. Questo significa che non viene istanziato sotto un processo separato, ma gestito all’interno della stessa applicazione che lo utilizza. Infatti, la libreria di SQLite legge e scrive direttamente all’interno di un unico file su disco rappresentativo del database stesso. Questo è il principale elemento distintivo di SQLite: effettuare il deploy di un database consiste semplicemente nello specificare un path sul disco che punti al file contenente il dabase. Conseguentemente, trasportare un database tra sistemi diversi è un’operazione semplice che consiste nella semplice copia di un file.

Le principali caratteristiche di SQLite possono essere riassunte come segue:

  • Nessuna configurazione: la creazione di un database non comporta assolutamente nulla. Non bisogna creare un utente amministrativo, né istanziare un processo separato che stia in ascolto di comandi SQL, né assegnare permessi agli utenti. Ancora più importante, nessuna azione di restore è richiesta in seguito ad un crash di sistema;
  • Unico file per il database: l’applicazione che utilizza SQLite accede direttamente ad un unico file contenente il database. Grazie all’utilizzo di tecniche di caching (completamente trasparenti all’applicazione), l’accesso al file risulta circa il 20%-30% più veloce rispetto all’accesso diretto al file system;
  • Formato cross-platform: SQLite è assolutamente compatibile con qualunque file-system, con qualunque macchina a 32/64 bit indipendentemente dall’architettura (big-endian o little-endian).

Compatibilità

Il sorgente di SQLite è scritto in C, e disponibile a questa pagina web. Praticamente qualunque macchina equipaggiata di GCC può compilare il codice ed avere a disposizione le API per l’accesso e la creazione del database. All’interno della stessa pagina web è possibile trovare i binari per Android, Linux, Mac OS X, Windows, Windows Phone 8, Windows Runtime e .NET.

Oltre a ciò, va notato che esistono i binding di SQLite per la maggior parte dei linguaggi di programmazione quali:

Quando NON utilizzare SQLite

Finora SQLite ha dimostrato di risolvere un gran numero di problemi riguardanti lo sviluppo ed il deployment di applicazioni richiedenti un database di tipo SQL. La lista degli utenti famosi di SQLite è impressionante, e tra essi si annoverano: Adobe, Bentley, Dropbox, Facebook, Google, McAfee, Microsoft, Firefox, PhP, Python, RPM, Skype, Tcl/Tk. Non possiamo comunque considerarlo come una panacea per risolvere tutti i problemi e vi sono alcuni casi specifici in cui NON si dovrebbe ricorrere all’utilizzo di SQLite, riportati nella seguente figura riassuntiva:

Figura 1. Quando non utilizzare SQLite (click per ingrandire)

Quando non utilizzare SQLite

Le motivazioni sono semplici e spiegate qui di seguito:

  • Remotizzazione: utilizzare SQLite come database remoto è sempre possibile qualora sia disponibile un filesystem di rete. Tuttavia, la latenza associata all’accesso a file condivisi in rete lo renderà lento e di scarsa utilità pratica. In questi casi bisogna necessariamente ricorrere a un DBMS client/server;
  • Database di grandi dimensioni: SQLite può gestire database della dimensione massima di 140 Terabytes. Benchè tale dimensione sia ragguardevole, questo può essere fonte di problemi in molti filesystem non in grado di gestire file di dimensioni così grandi;
  • Concorrenza: andiamo alla vera nota dolente. Il processo di scrittura di SQLite è mono-thread, sebbene esso sia in grado di gestire diversi processi in lettura contemporaneamente. Gli accessi concorrenti vengono gestiti tramite una coda che ha ovviamente una dimensione finita e diventa sorgente di una certa latenza in scrittura. Nel caso di applicazioni/siti web che richiedono un elevato numero di scritture allo stesso tempo NON utilizzate SQLite;
  • Caratteristiche (minori) mancanti: come accennato prima, SQLite implementa quasi tutte le caratteristiche di SQL standard. Ciò che manca è elencato di seguito:
    • Right e full outer join;
    • Alter table: implementato solo da rename table e add column;
    • Scrittura sulle viste;
    • Grant e Revoke: questo è dovuto alla scelta di progetto di rendere SQLite disponibile su unico file. La gestione dei permessi va dunque demandata al file system.

Se vuoi aggiornamenti su SQLite: introduzione al database SQL più usato inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su SQLite: introduzione al database SQL più usato

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy