Molto spesso i progettisti software si trovano a dovere decidere quale
tipologia di database sia più consona per la loro applicazione. In questo
articolo spiegheremo cosa si intende per database embedded
e in che situazioni conviene usarli per costruire una architettura software
adatta alle nostre necessità e soprattutto, alle nostre risorse
computazionali e di spazio.
I database embedded sono tutti quei database integrati in un ambiente che
dispone di risorse computazionali e di memorizzazione limitate. Un esempio
semplice è rappresentato da tutte quelle applicazioni atte a girare su
dispositivi mobile o in ambienti IoT. I database embedded sono quindi quei
database che per loro natura non necessitano di un server remoto per essere
gestiti e che, per tale motivo, possono essere adottati anche quando le
risorse sono limitate. Le applicazioni che adottano i database embedded
risultano essere più veloci e con più risorse a disposizione rispetto a
quelle che utilizzano dei database basati su server remoti. Questo perché,
essendo il database gestito localmente (spesso su file), tutti i processi
di comunicazione tra l’applicazione e il database vengono gestiti quasi
immediatamente.
Se le performance sono molto importanti per la nostra applicazione, allora
è strettamente consigliabile adoperare un database di questo tipo.
I database embedded, quindi, sono usati in tutte quelle situazioni dove non
è possibile scambiare dei dati con un server remoto (tramite la rete) e
quando la vostra applicazione deve girare in un’unica istanza per l’utente;
ovvero non è richiesta la sincronizzazione dei dati da parte di un server.
Questi database permettono una sola scrittura alla volta e
non risultano usabili se la vostra applicazione ha più istanze di
esecuzione. In poche parole, non possono leggere e scrivere dati in
parallelo.
Come per i database ordinari, anche con quelli embedded abbiamo di una
suddivisione tra database relazionali e non relazionali. In questa
panoramica ne vedremo alcuni di entrambe le categorie, in modo da fornire
al lettore una buona base di conoscenza iniziale.
Database Embedded Relazionali
I database embedded relazionali sono certamente in maggior numero rispetto a quelli non relazionali. Vediamone subito alcuni:
Nome e Link | Descrizione |
---|---|
SQLite | SQLite è una libreria software scritta in linguaggio C che implementa un DBMS SQL incorporabile all'interno di applicazioni. Permette di creare una base di dati (comprese tabelle, query, form, report) interamente racchiusa in un unico file. |
MySQL Embedded | MySQL Embedded fornisce la maggior parte delle caratteristiche di un normale database MySQL adottando l’approccio embedded. |
Microsoft SQL Server Compact | Microsoft SQL Server Compact è un database utilizzabile per compilare siti Web ASP.NET e applicazioni desktop per Windows. |
Firebird Embedded | Firebird Embedded include un client ed un server in un'unica DLL per semplicità di distribuzione. Risulta molto pratico, ma privo di molti dei sistemi di protezione usuali di Firebird. |
H2 Database Engine | H2 è un gestore di basi di dati relazionale scritto in linguaggio Java con tecnologia in memory. Può essere incapsulato in applicazioni Java o eseguito in modalità client-server. |
Tra gli embedded database relazionali più comuni, e probabilmente di più facile utilizzo, non possiamo fare a meno di porre l’attenzione su SQLite. Vediamo brevemente come usare SQLite. Dal link sopra citato, e supponendo di lavorare in ambiente Windows, scarichiamo l’sqlite-tools, sotto la categoria Precompiled Binaries for Windows. Dentro l’archivio .zip scaricato, troveremo un file eseguibile (sqlite3.exe) che potremo avviare da riga di comando mediante il prompt di Windows.
Rechiamoci nella cartella dove abbiamo salvato l’eseguibile sopra citato, ed eseguiamolo da riga di comando.
cd c:sqlite
sqlite3.exe
Da questo momento in poi potremmo lanciare comandi SQL per creare, leggere o modificare tabelle e dati.
Esiste anche uno strumento alternativo dotato di interfaccia grafica, SQLite Studio, anch’esso scaricabile gratuitamente dal relativo sito ufficiale. Oltre ad essere molto più intuitivo, esso permette di muoversi molto più velocemente nell’esecuzione dei vari comandi SQL.
Database Emdedded Non Relazionali (NoSQL)
I database embedded non relazionali (anche detti NoSQL) sono meno diffusi dei precedenti, ma in molte situazioni possono risultare più adatti (si veda a tal proposito la guida alla progettazione dei database NoSQL, disponibile su HTML.it). Di seguito elenchiamo alcune soluzioni embedded NoSQL:
Nome e Link | Descrizione |
---|---|
unQLite | unQLite è un database embedded NoSQL, che supporta i modelli Key/Value e a documenti. |
Couchbase Mobile | Couchbase Mobile è un database embedded NoSQL, anch'esso basato sui modelli Key/Value e a documenti, capace di gestire velocemente e in tutta sicurezza dati per applicazioni IoT o Web. |
Berkeley DB | Berkeley DB (BDB) è un database embedded NoSQL Key/Value e a documenti, che tramite licenza open source può essere utilizzato sulla maggior parte dei sistemi operativi, inclusi sistemi embedded Linux, Linux, macOS, QNX, UNIX, VxWorks e Windows. |
Tra le soluzioni NoSQL sopra elencate, unQLite ci è
sembrato un buon compromesso per iniziare a lavorare con i database
embedded di questa cateogoria. Per potere gestire con facilità questo
database tramite un ambiente dotato di interfaccia grafica, consigliamo di
scaricare FastoNoSQL, uno strumento che permette la gestione anche di altri
database NoSQL (come ad esempio Redis, Memcached, SSDB, LevelDB, RocksDB, LMDB, UpscaleDB).
Per creare un database con FastoNoSQL, basta cliccare su Add Connection, scegliere il database (in questo caso unQLite) e aprire la connessione, tramite la quale potremo gestire localmente il database.
Per aggiungere un dato, possiamo cliccare con il tasto destro su default -> Create Key, e scegliere il tipo di dato da salvare dall’apposito menu a tendina, fornendo una Key (un identificativo per riconoscere il nostro dato) e un Value (ovvero il dato).
Con lo stesso procedimento possiamo inserire molti altri dati e successivamente prelevarli per usarli.