AlaSQL è un database in-memory, interamente sviluppato in linguaggio JavaScript. Si dicono in-memory tutti quei database che gestiscono i loro dati nella memoria centrale del computer (la RAM), invece che nel disco rigido, come invece fanno la maggior parte dei database che conosciamo. Tali database stanno trovando spazio in un numero crescente di contesti applicativi, grazie proprio alle loro performance in fase di esecuzione (di gran lunga superiori a quelle dei database tradizionali). La possibilità di poter accedere a informazioni tramite l'uso della memoria volatile, infatti, risulta utile in tutte quelle applicazioni dove la velocità risulta essere un fattore determinante.
Tra i database in-memory più famosi, non possiamo fare a meno di citare Redis, di cui si è parlato in un'apposita guida di HTML.it.
Le origini
AlaSQL era stato prevalentemente pensato per poter gestire in modo efficace e veloce i dati delle applicazioni Node.js. La sua leggerezza e le sue performance ne hanno ben presto favorito l'uso su qualsiasi tecnologia basata su JavaScript (anche senza l'uso di framework particolari). Questo perché l'unica cosa di cui ha veramente bisogno per funzionare è semplicemente un browser per la navigazione web, dotato ovviamente di un interprete JavaScript.
AlaSQL è open source e rilasciato sotto licenza MIT. È compatibile con la maggior parte dei browser più comuni, come Google Chrome, Mozilla Firefox, Apple Safari, Internet Explorer e Opera Browser. Stesso discorso vale per i browser presenti sui sistemi operativi iOS e Android.
Le principali peculiarità di AlaSQL sono la velocità di esecuzione delle query, e la flessibilità di gestione sia per i dati relazionali che per i dati schema-less (ovvero di quei dati non strutturati, che non rappresentano informazioni omogenee e quindi non strutturabili, che sono spesso gestiti mediante database NoSQL). Inoltre, AlaSQL si contraddistingue per la sua capacità di effettuare operazioni ETL ed eventualmente di applicare la persistenza dei dati, esportandoli in diversi formati.
Qualche esempio pratico
Per poter utilizzare AlaSQL all'interno di una pagina HTML, dobbiamo innanzitutto includerlo in essa.
Possiamo farlo linkando direttamente la libreria su CDN, sfruttando questo link: https://cdn.jsdelivr.net/alasql/0.3/alasql.min.js. In alternativa, possiamo scaricare il file .js, ed includerlo nel nostro progetto in locale.
Per poterla includere nella nostra pagina web, non dovremo far altro che aggiungere il seguente tag <script>
all'interno dell'<head>
della pagina:
<script src="https://cdn.jsdelivr.net/alasql/0.3/alasql.min.js"></script>
Una volta inclusa la libreria, sarà possibile definire le query da eseguire tramite il comando alasql()
. Questo comando permette di utilizzare i tradizionali comandi SQL più comuni, tra cui JOIN
, VIEW
, GROUP BY
, UNION
, PRIMARY KEY
, ANY
, ALL
, e molti altri. La lista completa dei comandi disponibili è reperibile nella documentazione ufficiale.
Per mostrare un esempio semplice ed intuitivo, creeremo una pagina HTML in cui sarà inclusa la libreria AlaSQL.
Fatto ciò, proveremo ad eseguire una semplice query di selezione (SELECT
). Per farlo, però, dovremo prima creare una tabella con qualche dato di prova, da poter successivamente interrogare. Tuttavia, poiché AlaSQL permette di gestire anche dati JSON (in puro stile NoSQL), vedremo sia l'uso di una tabella (approccio relazionale), che quello di una struttura dati definita in JSON (approccio NoSQL).
Prima di ogni cosa creiamo un nuovo database:
var mio_database = new alasql.Database('nuovoDB');
Usiamo quindi la variabile mio_database per creare una nuova tabella (CREATE TABLE
), popolarla (tramite INSERT
) ed eseguire la query di selezione:
mio_database.exec("CREATE TABLE persone (nome string, eta number)");
mio_database.exec("INSERT INTO persone VALUES ('Mario', 18),('Elisabetta', 22)");
var res = mio_database.exec("SELECT * FROM persone WHERE eta < 20");
Il codice è abbastanza intuitivo e si commenta da solo; il risultato di suddetta query sarà la persona di nome Mario.
Per testare il tutto, utilizziamo una pagina HTML con il seguente <div>
(che fungerà da contenitore per i dati da visualizzare):
<div id="lista"></div>
Aggiungiamo quindi lo script precedente alla pagina, con qualche altra riga che popoli il <div>
appena menzionato:
<script src="https://cdn.jsdelivr.net/alasql/0.3/alasql.min.js">
var mio_database = new alasql.Database('nuovoDB');
mio_database.exec("CREATE TABLE persone (nome string, eta number)");
mio_database.exec("INSERT INTO persone VALUES ('Mario', 18),('Elisabetta', 22)");
var res = mio_database.exec("SELECT * FROM persone WHERE eta < 20");
document.getElementById("lista").innerHTML = JSON.stringify(res);
</script>
Una volta compreso come creare ed utilizzare le tabelle, ripetiamo l'operazione di SELECT
servendoci di un dato JSON:
var persone = [{ nome: 'Mario', eta: 18 },{ name: 'Elisabetta', eta: 22 },];
var res = alasql("SELECT * FROM ? persone WHERE eta < 22", [persone]);
document.getElementById("lista").innerHTML = JSON.stringify(res);
La prima riga ha creato un array di oggetti JSON (che in questo semplice esempio hanno tutti la stessa struttura, sebbene questo non rappresenti in alcun modo un vincolo), memorizzato nella variabile persone. Abbiamo quindi utilizzato queste informazioni come base di dati su cui eseguire una query SQL, sempre mediante la funzione alasql()
.
Conclusioni
La possibilità di adoperare un database client-side, leggero e performante, permette l'implementazione di un'infinità di casi d'uso, facilitando potenzialmente la gestione di app e servizi. La flessibilità d'uso delle strutture per la memorizzazione dei dati, sia intese in senso relazionale che NoSQL, allargano ancora di più gli orizzonti applicativi e facilitano la creazione di applicazioni web moderne ed innovative.