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