Introduzione a CouchDB, il dbms document-oriented da interrogare con JavaScript

9 novembre 2009

Il concetto di database relazionale affonda talmente in profondità nell’esperienza quotidiana di uno sviluppatore Web, che alle volte si è portati a pensare non esistano opzioni diverse a questo sistema di persistenza dei dati. Ovviamente non è cosi. Quest’articolo si pone come obiettivo un’introduzione esauriente di CouchDB, un DBMS non relazionale, costruito e pensato per offrirsi come valida alternativa a strumenti più classici (mysql, sql-server, etc.) che il più delle volte impongono impegnativi aggiustamenti alle strutture dati delle nostre applicazioni Web.

CouchDB: un database document-oriented

In CouchDB non esistono tabelle. Il contenuto informativo è suddiviso in diversi database che fungono da contenitori di documenti con strutture potenzialmente disomogenee tra di loro. Il documento è il fulcro di questo software (e di quelli che come lui condividono l’approccio document-oriented); un documento è formato da un insieme di coppie chiave-valore, ad esempio:

{
  "_id":          "9a826400d60073813c6f62508f9260e5",
  "_rev":         "1-1915117622",
  "type":         "Travel",
  "destination":  "Tokio",
  "dates":        {
                    "from": "15/07/2009",
                    "to":   "10/08/2009"
                  },
  "participants": [ "sandro", "francesca", "luca" ]
}

rappresenta un documento contenente le informazioni su di un viaggio; come si vede il valore associato ad ogni chiave può essere una stringa (come nel caso destination), un hash (in dates ad esempio), un array (partecipants) o una qualsiasi altra classe a patto che la stessa contenga informazioni su come serializzare e deserializzare il proprio contenuto.

Figura 1. Logo CouchDB

Logo CouchDB

A differenza dei database relazionali CouchDB non possiede il concetto di schema e quindi ogni documento in ogni database può essere strutturato in modo diverso dagli altri (ad esempio potrei avere un altro documento simile a quello appena illustrato ma con una chiave price_per_person in più).

Le uniche due chiavi obbligatorie sono:

Chiave obbligatoriaDescrizione
_idserve per identificare univocamente il documento (è comparabile, semanticamente, alla chiave primaria dei database relazionali)
_revviene utilizzata per la gestione delle revisioni, ad ogni operazione di modifica infatti la chiave _rev viene aggiornata (questo meccanismo è alla base della prevenzione dei conflitti in fase di salvataggio su CouchDB)

Questo accorgimento permette inoltre di poter interrogare il DBMS su versioni del documento non più attuali in quanto, con un approccio simile a quello di Subversion, CouchDB mantiene memoria di ogni revisione, da quella iniziale alla più recente.

L’altra grande differenza rispetto ai tradizionali RDBMS è il meccanismo di gestione delle query. Nei database relazionali una volta specificate e popolate le tabelle è possibile eseguire query utilizzando un linguaggio conosciuto come SQL (ne esistono vari dialetti ma il concetto non cambia nell’essenza); a fronte di una query il RDBMS utilizza indici interni e le proprie relazioni per costruire in tempo reale una tabella di risultato (che può, nelle query più semplici, essere un sottoinsieme della tabella di partenza).

Questa soluzione riesce ad essere performante in quanto i dati sono strutturati con questo preciso scopo; inoltre il database non deve conoscere a priori le query che verranno eseguite ma può rispondere a qualsiasi interrogazione, purché sia stilata usando SQL valido.

Se vuoi aggiornamenti su Introduzione a CouchDB, il dbms document-oriented da interrogare con JavaScript inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Introduzione a CouchDB, il dbms document-oriented da interrogare con JavaScript

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy