Quando conviene usare database NoSQL?

Federico
chiede

Sento sempre più spesso parlare di database NoSQL, ma non capisco perché dovrei scegliere una soluzione diversa da un database relazionale basato su SQL, come MySQL o Oracle. Quand’è che mi conviene usare questi NoSQL? E soprattutto, perché?

Vito Gentile
risponde

I database NoSQL (acronimo che sta per “Not Only SQL”, anche se alcuni lo intendono più come una forma di avversione contro i più tradizionali database relazionali) sono nati e si sono diffusi principalmente per gestire dati difficilmente strutturabili, che hanno quindi poca attinenza con le tabelle di un DB relazionale. Tra i motivi della loro diffusione, vi è anche la proliferazione dei social network e dei dati complessi di cui si richiede la gestione. Non è un caso, quindi, che tra le principali soluzioni NoSQL ve ne siano alcune sviluppate proprio dagli stessi prodotturi di alcuni tra i principali social networks: è il caso di Cassandra, sviluppato originariamente proprio da Facebook (ma poi acquisito da Apache), di cui abbiamo parlato su HTML.it in un articolo dedicato.

L’uso di una soluzione NoSQL va quindi scelto in base alla specifica configurazione dei dati da memorizzare. Esistono infatti diverse categorie di database NoSQL, quali quelli a documenti, a grafo, basati su coppie chiave-valore e qualche altra soluzione (anche ibrida). Questa categorizzazione è stata analizzata ed approfondita (anche da un punto di vista progettuale) nella guida alla progettazione dei database NoSQL, pubblicata su HTML.it.

Se i nostri dati rappresentano una rete (ovvero un grafo), è probabilmente più corretto usare un databse NoSQL come OrientDB (di cui è disponibile una guida su HTML.it), ma ci possono essere altri casi in cui una soluzione a documenti come MongoDB può essere più utile. Su HTML.it sono disponibile guide a diversi DBMS non relazionali: oltre ai già citati OrientDB e MongoDB, vi è anche Neo4j.

Infine, vi è una ulteriore possibilità recentemente introdotta su MySQL (ma anche su altri database relazionali), che permette di integrare dati non strutturati all’interno di una tabella relazionale: l’utilizzo del tipo JSON. Ne abbiamo parlato in una lezione della guida a MySQL, e si tratta di una possibilità comoda per chi ha già un grosso DB MySQL e non può permettersi un porting, oppure per quei casi in cui la non strutturazione dei dati e limitata a pochi casi.