lunedì 3 maggio 2010

Il movimento NoSQL e i database schemaless

Il termine NoSQL è stato usato per la prima volta nel 1989 da Carlo Strozzi come nome per un database relazionale open source che non esponeva un'interfaccia SQL. Negli anni successivi questo termine, ribattezzato Not Only SQL, è stato usato per identificare tutti quei database che non potevano identificarsi precisamente nel paradigma relazionale. Oltre al termine NoSQL spesso si riferisce anche a questa classe di database con il termine NoREL (non relazionale), database schemaless oppure in ambito accademico nei papers ci si riferisce a questi database con il nome Structured Storage.

Il termine è stato reintrodotto nel vicino 2009 da un dipendente di Rackspace, Eric Evans, quando partecipò ad un evento organizzato da Last.fm per discutere di database distribuiti open source. Il nome è diventato l'identificativo per raggruppare il gran numero di database non-relazionali che sono nati in questi ultimissimi anni e il nome al movimento che li supporta.

Caratteristiche comuni di questi database sono : non-relazionali, open source, scalabili orizzontalmente, schema-free e API semplici.

Uno dei grandi benefici di questi sistemi è la facilità e la velocità con cui è possibile cambiare lo schema del database. Con i database relazionali invece, ogni release del software, che richiedeva una modifica alle proprietà del modello, doveva contenere uno script di migrazione della base di dati contenente quasi sempre operazioni di tipo ALTER TABLE poco performanti e che spesso portavano il sistema a tempi di inutilizzo.

L'architettura NoSQL spesso fornisce poche garanzie sulla consistenza dei dati, le transazioni sono ristrette al singolo entry, molti database non supportano le proprietà ACID (Atomicity, Consistency, Isolation, e Durability) e spesso non sono supportate le funzionalità di JOIN tra tabelle. Alcuni sistemi garantiscono le proprietà ACID attraverso l'aggiunta di un middleware layer supplementare.

Molti sistemi NoSQL implementano una architettura distribuita che permette ai dati di essere distribuiti in modo ridondante su più server. In questo modo il sistema può scalare facilmente aggiungendo altri server al sistema.

Le features dei database NoSQL variano molto da implementazione a implementazione, ma è possibile definire un set di caratteristiche di alto livello che accomunano tutte le soluzioni. I database appartenenti alla categoria NoSQL sono :


  1. de-normalizzati, spesso schema-free o orientati all'archiviazione di documenti

  2. key/value based

  3. scalabili orizzontalmente

  4. supportano la replicazione dei dati

  5. bastati su protocolli HTTP/REST o con API semplici

  6. supportano MapReduce style programming

  7. Eventually Consistent

  8. fault tolerance


Alcune importanti implementazioni sono : Google BigTable, Amazon Simple DB, Apache CouchDB e Apache Cassandra.