Oggi voglio parlarvi di un libro molto interessante, ovvero il tanto atteso "NoSQL - Distilled" di Pramod J. Sadalage e Martin Fowler.

Titolo: NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence
Autori: Pramodkumar J. Sadalage, Martin Fowler
Lingua: inglese
Editore: Addison Wesley (settembre 2012)

NoSQL: al di là delle buzzword

Il termine NoSQL purtroppo è diventato in fretta una buzzword. Gli autori di NoSQL Distilled lo sanno bene, hanno quindi deciso di affrontare l'argomento - secondo me - nel migliore dei modi, ovvero fornendo una propria definizione del termine e aderendovi per tutto il libro, specificando comunque che il loro è semplicemente un punto di vista molto personale e - soprattutto - pragmatico.

Anche il resto del libro è improntato alla praticità e soprattutto alla sinteticità, requistito fondamentale per il pubblico a cui ha deciso di rivolgersi: CTO, project manager, sviluppatori, insomma tutta gente che ha bisogno di conoscere questi argomenti ma ha troppo poco tempo e risorse per poter sperimentare tutte le tecnologie possibili.

Part I: Understand

La prima parte del libro si occupa di spiegare e analizzare i vari tipi di database NoSQL, e cosa aspettarsi da essi. Oltre ad una serena analisi sui limiti del modello relazionale (nel primo capitolo), abbiamo una breve introduzione ai nuovi modelli di accesso ai dati. Il capitolo 4 "Distribution Models" quindi descrive i principali pattern di distribuzione dei dati, facendo il parallelo con le soluzioni tradizionali (sempre relazionali) ed evidenziando similitudini e differenze.

Dopo questa introduzione, finalmente si affrontano le questioni "spinose". Vengono infatti date delle risposte alle domande che un tipico utilizzatore di database relazionali si pone una volta entrato nel mondo NoSQL:

  • consistenza e durabilità dei dati;
  • cenni al celebre CAP theorem;
  • transazioni e proprietà ACID.

Tutti questi argomenti delicati (è un eufemismo) vengono affrontati con grande maturità e soprattutto senso pratico, mostrando come nelle applicazioni del mondo reale ci sia davvero spazio per un rilassamento dei requisiti di durabilità e transazionalità che, dopo anni di database relazionali, diamo praticamente per scontati. Viene mostrato come questo rilassamento possa portare, dove possibile, a decisivi miglioramenti nelle performance, senza intaccare troppo la solidità delle applicazioni.

C'è anche un breve capitolo dedicato alla tecnica Map-Reduce, dove viene mostrato come sia legata a doppio filo alla natura stessa dei database NoSQL, alcuni aspetti del suo funzionamento, qualche semplice esempio.

Part II: Implement

La seconda parte analizza più in dettaglio le varie tipologie di database:

  • Key-Value Databases;
  • Document Databases;
  • Column-Family Stores;
  • Graph Databases.

Ogni modello viene confrontato con gli altri per quanto riguarda alcuni aspetti basilari, ovvero:

  • Consistenza dei dati;
  • Transazioni;
  • Query e utilizzo nelle applicazioni;
  • prestazioni: distribuzione dei dati, clustering, sharding, ottimizzazioni possibili e soluzioni comuni.

Una volta chiariti questi aspetti importanti, si scende nei dettagli e nelle peculiarità di ogni modello dei dati. Di particolare utilità i paragrafi "Suitable Use Case" ("Casi d'uso adatti") e "When Not to Use" ("Quando non usarlo"); grazie ad essi si può costruire un mini-riassunto delle varie possibilità di applicazione dei database NoSQL alle applicazioni reali, ma anche stabilire se è il caso di rimanere nel mondo relazionale! Davvero molto utile.

Nel capitolo Schema Migrations vengono accennate alcune tecniche per la gestione di un database in evoluzione e di come i database NoSQL permettano, in alcuni casi, una più semplice gestione dei cambiamenti del data model.

I capitoli restanti, infine, fanno alcune ipotesi sull'evoluzione delle applicazioni e sul ruolo che avranno i database NoSQL in tutto ciò. Ho trovato di particolare importanza e profondità il capitolo Polyglot Persistence, nel quale gli autori mostrano come un possibile futuro (che è già presente in realtà) preveda la coesistenza di svariate tecnologie di accesso ai dati, e delle conseguenze che questa molteplicità abbia sulle caratteristiche di disponibilità, performance e complessità delle applicazioni.

In conclusione

Al di là della competenza e autorevolezza nel presentare gli argomenti, ho apprezzato moltissimo la capacità di sintesi e la serenità con cui sono trattati argomenti che troppo spesso diventano "religiosi", come nel caso del CAP theorem e le transazioni. Da segnalare inoltre, alla fine di ogni capitolo, una sezione Key Points che sintetizza al massimo gli argomenti trattati, molto utile per riprendere il filo prima di "aggredire" il capitolo seguente.

A dire il vero avrei preferito qualche approfondimento maggiore, soprattutto per quanto riguarda, esempi di programmazione e query, oltre che ad eventuali consigli e suggerimenti (di massima, almeno) per la configurazione di database in ambienti di produzione.

PRO:

  • sinteticità;
  • copre tutte le principali tecnologie NoSQL;
  • ben scritto e facile da capire;
  • obiettività.

CONTRO:

  • alcune sezioni sono troppo sottodimensionate;
  • pochi esempi di codice e query;
  • mancano consigli pratici per installazioni "vere".

Una lettura consigliatissima!

Links