SQLite è un database utilizzato in milioni di software e dispositivi mobili. E’ stato inventato da D.Richard Hipp nell’agosto 2000. Lite in SQLite significa leggerezza in termini di installazione, amministrazione del database e risorse necessarie, motivo per cui è stato scelto come database in molte app per smartphone e dispositivi portatili (con esigue risorse e capacità di elaborazione).
In parole povere, SQLite è un pacchetto software di dominio pubblico che fornisce un sistema di gestione di database relazionale o RDBMS. I sistemi di database relazionali vengono utilizzati per archiviare record definiti dall’utente in tabelle di grandi dimensioni. Oltre all’archiviazione e alla gestione dei dati, un motore di database può elaborare comandi di query complessi che combinano dati da più tabelle per generare report e riepiloghi di dati. Altri prodotti RDBMS popolari includono Oracle Database, DB2 di IBM e SQL Server di Microsoft sul lato commerciale, con MySQL e PostgreSQL che sono popolari prodotti open source.
Perché usare un database?
Mantenere i dati in un singolo file di testo (o come molti tendono a fare, con excel ad esempio) non è molto efficiente; leggere e archiviare dati potrebbe esserlo ancora meno. I database organizzano i dati nell’ordine corretto in modo che la lettura e la scrittura dei dati siano molto più veloci. I dati possono essere strutturati, semi-strutturati o non strutturati. I database vengono utilizzati principalmente per archiviare dati strutturati e semi-strutturati. I database possono essere suddivisi come segue in base al tipo di struttura di dati che verrà archiviata.
- Database relazionale: tipo di database comunemente usato che ha una struttura a tabella. Le tabelle possono avere relazioni con altre tabelle. Il linguaggio SQL è utilizzato per manipolare i dati su questo tipo di database.
- Database dei chiave-valore: i dati vengono memorizzati assieme a una chiave associata. I dati possono essere recuperati con la chiave. I database main memory si un classico esempio.
- Database di oggetti: la struttura dei dati è più simile a un oggetto che a una tabella.
- Database a grafo: il database a grafo è una raccolta di nodi e vertici utilizzata principalmente nelle applicazioni di data mining e social media.
Caratteristiche di SQLite
- Serverless: non richiede un processo server o un sistema separato per funzionare come accade normalmente per un RDBMS come MySQL, PostgreSQL, ecc. La libreria SQLite accede direttamente ai suoi file di archiviazione. Le applicazioni interagiscono con il database SQLite in lettura e scrittura direttamente dai file di database memorizzati sul disco.
- Zero Configuration: la creazione di un’istanza del database SQLite è semplice come l’apertura di un file. Grazie all’architettura senza server, non è necessario “installare” SQLite prima di utilizzarlo. Non esiste alcun processo server che deve essere configurato, avviato e arrestato. Inoltre, SQLite non utilizza alcun file di configurazione.
- Cross-Platform: l’intera istanza del database risiede in un singolo file multi-piattaforma, che non richiede amministrazione.
- Autosufficiente: una singola libreria contiene l’intero sistema di database, che si integra direttamente in un’applicazione host. Ciò significa che richiede un supporto minimo dal sistema operativo o dalla libreria esterna e questo rende SQLite utilizzabile in qualsiasi ambiente, specialmente in dispositivi integrati come iPhone, telefoni Android, console di gioco, lettori multimediali portatili, ecc. SQLite è sviluppato utilizzando ANSI-C. Il codice sorgente è disponibile in sqlite3.c e la sua header sqlite3.h. Se vuoi sviluppare un’applicazione che utilizza SQLite, devi solo rilasciare questi file nel tuo progetto e compilarlo con il tuo codice.
- Ingombro di runtime ridotto: la build predefinita è inferiore a un megabyte di codice e richiede solo pochi megabyte di memoria. Con alcune regolazioni, sia la dimensione della libreria che l’uso della memoria possono essere ulteriormente e significativamente ridotti.
- Transactional: tutte le transazioni in SQLite sono completamente conformi ACID. Significa che tutte le query e le modifiche sono Atomic, Coerent, Isolated e Durable. In altre parole, tutte le modifiche all’interno di una transazione avvengono completamente o per nulla anche quando si verifica una situazione imprevista come un arresto anomalo dell’applicazione, un’interruzione dell’alimentazione o un arresto anomalo del sistema operativo.
- Full-Featured: SQLite supporta la maggior parte delle funzionalità del linguaggio di query presenti nello standard SQL92 (SQL2).
- Altamente affidabile: il team di sviluppo di SQLite prende molto sul serio il test e la verifica del codice.
Caratteristiche distintive di SQLite
SQLite utilizza tipi dinamici per le tabelle. Significa che è possibile archiviare qualsiasi valore in qualsiasi colonna, indipendentemente dal tipo di dati.
SQLite consente a una singola connessione di accedere contemporaneamente a più file di database. In questo modo sono possibili operazioni come l’unione di tabelle in database diversi o la copia di dati tra database in un unico comando.
SQLite è in grado di creare database in memoria quindi maggiormente performanti.
Svantaggi di SQL
In SQL per mantenere l’integrità dei dati, solo un utente per volta può scrivere sul file. Potrebbe anche richiedere un po’ più di lavoro per garantire la sicurezza dei dati sensibili (come le password). Inoltre, SQLite non offre le stesse funzionalità di molti altri RDBMS, limitandone alcune funzionalità avanzate. Infine, SQLite non convalida i tipi di dati. Laddove molti altri software di database rifiutano dati non conformi allo schema di una tabella, SQLite consente agli utenti di archiviare dati di qualsiasi tipo in qualsiasi colonna.
SQLite crea schemi, che vincolano il tipo di dati in ciascuna colonna, ma non li impongono. L’esempio seguente mostra che la colonna ID prevede di memorizzare numeri interi, la colonna NOME prevede di memorizzare testo e che la colonna ETA prevede di memorizzare numeri interi:
CREATE TABLE celebs ( id INTEGER, nome TEXT, eta INTEGER) ;
Tuttavia, SQLite non rifiuterà valori di tipo errato. Potremmo inserire accidentalmente i tipi di dati errati nelle colonne. L’archiviazione di diversi tipi di dati nella stessa colonna è una cattiva abitudine che può portare a errori difficili da correggere, quindi è importante essere rigorosi sullo schema anche se SQLite non lo imporrà.