Corso di Laurea Specialistica in Ingegneria Informatica
Corso di Linguaggi e Tecnologie Web
NoSQL
http://nosql-database.org/
Eufemia TINELLI
A. A. 2011 - 2012
Cosa è NoSQL?
• 1998 – il termine NoSQL è usato per la prima volta per indicare una base
di dati relazionale open source che non utilizzava un’interfaccia SQL
• 2009 – il termine NoSQL è usato per indicare un sistema di archiviazione
dati open-source distribuito
• Successivamente … – il termine NoSQL rappresenta l’insieme delle
tecnologie che non potevano identificarsi precisamente nel paradigma
relazionale
– spesso si riferisce anche a questa classe di tecnologie con il termine NoREL
oppure Structured Storage
• Le features dei database NoSQL variano molto da implementazione a
implementazione, un possibile insieme comune è il seguente:
–
–
–
–
de-normalizzati
scalabili orizzontalmente
supporto alla replicazione dei dati
bastati su protocolli HTTP/REST o con API semplici
E. TINELLI – LTW A. A. 20112011-2012
2
Un passo indietro … DBMS relazionali
• Nati negli anni '70
• Supporto efficace ed efficiente per applicazioni di tipo
"gestionale" (contabilità, prenotazioni, gestione personale,
…) con requisiti
–
–
–
–
persistenza, condivisione, affidabilità
dati a struttura semplice, con dati di tipo numerico/simbolico
transazioni concorrenti
interrogazioni complesse
• Il mondo relazionale è costituito da due grandi famiglie di
applicazioni, con requisiti molto diversi
– OLTP
– OLAP
E. TINELLI – LTW A. A. 20112011-2012
3
Limiti del modello relazionale …
• Accesso ai dati
– lunga attesa per completare un'operazione
• Scalabilità
– Grandi volumi di dati
– Accesso multi-utente
• Incompatibilità dei modelli
E. TINELLI – LTW A. A. 20112011-2012
4
Scalabilità e Consistenza
• Architetture per DB
– Shared-memory (più processori condividono RAM e dischi) - Scalano
in modo limitato, perché l'accesso alla memoria è un collo di bottiglia
– Shared-disk (più processori condividono dischi) - I buffer e i lock
vanno coordinati (scalabilità limitata)
– Shared-nothing (più processori ciascuno con RAM e dischi propri) Scalano meglio (se i dati sono partizionabili e distribuibili
automaticamente in modo da avere accessi bilanciati e le operazioni
sono "localizzabili")
• Livelli di consistenza
– Strong consistency - Gli esiti di una scrittura sono correttamente
visibili da tutte le letture successive
– Weak consistency - Non è garantito che gli esiti di una scrittura siano
visibili dalle letture (immediatamente successive)
– Eventual consistency – "Prima o poi" gli esiti di una scrittura sono
visibili a tutte le letture
E. TINELLI – LTW A. A. 20112011-2012
5
CAP theorem
• Un sistema distribuito non può soddisfare contemporaneamente le tre
proprietà:
– Consistency - In un sistema che abbia repliche, queste debbono essere
aggiornate tutte prima di permettere accessi
– Availability - Un sistema disponibile deve avere repliche
– Partition-tolerance - Se le repliche sono su nodi diversi, questi possono essere
isolati l'uno dall'altro
• Es. “vere” PA e non C
– se abbiamo partition-tolerance e in ciascuna partizione si può leggere senza
interruzione (availability), allora non possiamo avere consistency, perché gli
aggiornamenti non possono propagarsi
• LAN - il rischio di partizionamenti è basso e quindi si può rinunciare alla
partition tolerance
• WAN – le repliche sono usate soprattutto per disaster recovery, ma i
disastri sono rari, nel qual caso diventa (quasi) accettabile la rinuncia alla
availability
E. TINELLI – LTW A. A. 20112011-2012
6
Categorie di database NoSQL
•
•
•
•
Coloumnfamily: i dati sono organizzati in righe e colonne, ma le righe possono
avere quante colonne si vogliono e non c’è bisogno di definire le colonne come
prima cosa.
Key/Value (Map): in questo caso i dati vengono immagazzinati in un elemento
che contiene una chiave assieme ai dati veri e propri, questo metodo è il più
semplice da implementare, ma anche il più inefficiente se la maggior parte delle
operazioni riguardano soltanto una parte di un elemento.
Document store: è l’evoluzione del metodo key/value, rispetto ai normali
database relazionali invece che immagazzinare i dati in tabelle con dei campi
fissi, questi vengono messi in un documento che può contenere illimitati campi
di illimitata lunghezza
Graph-based: i dati vengono immagazzinati sotto forma di strutture a grafi,
rendendo più performante l’accesso a questi da applicativi orientati agli oggetti.
E. TINELLI – LTW A. A. 20112011-2012
7
CAP theorem e i data storage NoSQL
E. TINELLI – LTW A. A. 20112011-2012
8
Graph-based Model
• I Graph-based model vengono utilizzati nelle applicazioni in
cui le informazioni sull’interconnettività dei dati o la topologia
è importante quanto i dati stessi.
• L’utilizzo di Graph DB presenta in tal senso diversi vantaggi:
– Modellazione dei dati. Strutture a grafo sono visibili all’utente e
consentono in modo naturale la gestione dei dati nelle applicazioni. I
grafi hanno il vantaggio di essere in grado di mantenere tutte le
informazioni su un'entità in un singolo nodo e mostrare informazioni
correlate attraverso archi connessi a essa.
– Linguaggio di interrogazione. Associate ai grafi ci sono specifiche
operazioni sui grafi come trovare i percorsi più brevi, determinazione
di alcuni subgraphs e così via che consentono agli utenti di esprimere
una query a un elevato livello di astrazione.
– Implementazione. I graph-DB possono fornire strutture
specializzate per l’archiviazione dei grafi e efficienti algoritmi sui grafi
per realizzare operazioni specifiche.
E. TINELLI – LTW A. A. 20112011-2012
9
Graph-based Model
• Modelli in cui le strutture dati per lo schema e le istanze sono
modellate come grafi o generalizzazioni di essi (ipergrafo) e
la manipolazione dei dati è espressa tramite operazioni
orientate alla struttura del grafo
– ipergrafo è un grafo dove un arco, detto iperarco, può collegare un
qualsiasi numero (> 0) di vertici(nodi)
E. TINELLI – LTW A. A. 20112011-2012
10
HypergraphDB
• Database a grafo open source (LPGL) che supporta ipergrafi generalizzati
dove gli archi possono puntare ad altri archi
• Creato, in particolare, per progetti di intelligenza artificiale e per il
Semantic Web
• L'unità di base di una rappresentazione viene chiamata “atomo”. Ogni
atomo ha una tupla associata di atomi, chiamata “target set”. La
dimensione del target set viene chiamata grado(o cardinalità) dell'atomo.
Atomi di grado 0 sono chiamati nodi e gli atomi di grado > 0 sono detti
collegamenti
• Ad ogni atomo è associato un valore fortemente tipizzato. I valori sono di
tipi arbitrari, e i tipi stessi sono a loro volta atomi
• Gli atomi sono le entità semantiche che formano la struttura
dell’ipergrafo, mentre i valori sono i dati che possono essere strutturati o
no. Il valore di un atomo può essere modificato o sostituito con un valore
di tipo diverso, pur conservando una identica struttura di collegamento
E. TINELLI – LTW A. A. 20112011-2012
11
HypergraphDB: Architettura a 2 livelli
• L'architettura a due strati definisce un'astrazione dell’effettiva
archiviazione dell’ipergrafo:
• Livello di Archiviazione Primitivo (Primitive Storage Layer) è
suddiviso in due array associativi
– LinkStore ID Æ List < ID >
– DataStore ID Æ List < byte >
– è costituito da un grafo di identificatori e da un insieme di dati grezzi. Ogni
identificatore mappa sia una tupla di identificatori e sia un array di byte
• Il Livello del Modello (Model Layer) è dove risiede l'astrazione di
atomo, insieme con il sistema dei tipi, caching, servizi di indicizzazione e
di query e viene implementato formalizzando il layout del livello primitivo
di archiviazione:
–
–
–
–
AtomID Æ [TypeID, ValueID, TargetID, … , TargetID]
TypeID Æ AtomID
TargetID Æ AtomID
ValueID Æ List < ID > | List < byte >
E. TINELLI – LTW A. A. 20112011-2012
12
Cassandra
• Inizialmente sviluppato all'interno di Facebook (per potenziare la ricerca
all'interno del sistema di posta) e successivamente, dal marzo 2009, è
entrato a far parte del progetto Incubator di Apache Software Foundation
• Adotta un approccio ibrido tra una DB orientato alle colonne e uno
key/value
• I dati sono automaticamente duplicati su più nodi
• Durante le operazioni di read/write, è possibile esplicitare il livello di
consistenza che si vuole mantenere passando alla funzione di
lettura/scrittura due parametri che indicano il comportamento atteso
– Es. modalità di esecuzione per le funzioni di write:
• esegue tutte le operazioni in asincrono e conseguentemente non verifica l'effettiva
scrittura del dato;
• scrive e verifica la scrittura almeno sulla metà + 1 del numero di nodi indicati dalle
impostazioni di fault-tolerance;
• scrive e verifica la scrittura su ogni nodo
• Il modello dati: si tratta essenzialmente di un aggregato di Hash e Array
che però rivestono, a seconda della loro posizione, ruoli e funzioni ben
distinte
E. TINELLI – LTW A. A. 20112011-2012
13
Cassandra: column e supercolumn,
columnfamily e supercolumnfamily
{
}
name: "telephone number",
value: {
{
name: "prefix",
value: "349",
timestamp: 123123141241
},
{
name: "number",
value: "0516558976",
timestamp: 231231231434
}
}
User = {
bill: {
age: "22",
email: "[email protected]",
gender: "male",
username: "mvol"
},
jack: {
age: "20",
job_title: "professional biker"
}
}
E. TINELLI – LTW A. A. 20112011-2012
14
Vantaggi e Svantaggi di NoSQL
• Vantaggi
– Limitazione o eliminazione totale delle operazione di join
– Semplicità Æ scalabilità orizzontale
– L’object-relational mapping non è più necessario
• Svantaggi
– Semplicità Æ mancanza dei controlli per l’integrità dei dati
– Mancanza di uno standard per l’accesso ai dati
– Mancanza di strumenti di ottimizzazione per l’interrogazione e
implementazione di nuovi tipi di dati
– Work in progress…
progress
E. TINELLI – LTW A. A. 20112011-2012
15