Basi di Dati e Sistemi Informativi Database NoSQL Giuseppe Loseto Corso di Laurea in Ing. Informatica – Ing. Gestionale Magistrale NoSQL (Not Only SQL) I principali metodi d’implementazione dei database NoSQL sono i seguenti: Column Store/Column Family dati organizzati in righe e colonne, ma le righe non hanno necessariamente una struttura omogenea Key/Value dati immagazzinati in un elemento (map) che contiene una chiave assieme ai dati veri e propri semplice da implementare, ma inefficiente se la maggior parte delle operazioni riguardano soltanto una parte di un elemento Document store evoluzione del metodo key/value dati memorizzati come documenti che possono contenere illimitati campi di illimitata lunghezza Graph dati immagazzinati sotto forma di strutture a grafi, rendendo più performante l’accesso a questi da applicativi orientati agli oggetti Basi di Dati e Sistemi Informativi Database NoSQL 2 di 19 DATA VOLUME Data Volume VS Complexity Key-Value Store Column Store Document Store Graph Store RDBMS DATA COMPLEXITY Basi di Dati e Sistemi Informativi Database NoSQL 3 di 19 Vantaggi VS Svantaggi Vantaggi ogni elemento contiene tutte le informazioni necessarie non serve usare i dispendiosi (in termini di performance) JOIN semplicità e scalabilità orizzontale mappatura più diretta alle object classes (si possono ridurre di molto i tempi dedicati al cosiddetto object-relational mapping) Svantaggi mancanza dei controlli fondamentali sull’integrità e consistenza dei dati (ricade totalmente sull’applicativo) mancanza di uno standard universale (come può essere l’SQL) API e metodo di storing/accesso ai dati propri passaggio verso un altro database non immediato Basi di Dati e Sistemi Informativi Database NoSQL 4 di 19 Principali Caratteristiche Non esisteranno più tabelle, ma collezioni di dati La chiave primaria è solitamente un campo ID che, se non viene fornito in fase di inserimento, verrà aggiunto automaticamente dal DBMS Nei DBMS NoSQL a documenti, è significativa l’assenza delle relazioni Embedding annidare un oggetto all’interno di un altro sconsigliabile quando i documenti (quello annidato e quello che lo contiene) crescono di dimensione Referencing simile al concetto di relazione dei RDBMS consiste nel fare in modo che un documento contenga, tra i suoi dati, l’ID di un altro documento Paradigma BASE (Basically Available, Soft-state, Eventual consistency) Basi di Dati e Sistemi Informativi Database NoSQL 5 di 19 Column Store dati ottimizzati per operazioni da svolgere “per colonna” spesso rappresentano una soluzione intermedia tra RDBMS e Key-Value Store colonne memorizzabili anche in modalità distribuita Basi di Dati e Sistemi Informativi Database NoSQL 6 di 19 Key-Value Store VOLDEMORT (LinkedIn) Sono definiti da un semplice dizionario/mappa che permette all’utente di recuperare e aggiornare il valore memorizzato data la sua chiave Get (key) Set (key, value) Delete (key) Basi di Dati e Sistemi Informativi Database NoSQL 7 di 19 Document Store Memorizza le informazioni come collezioni di documenti Un documento può contenere informazioni annidate ed ha un formato riconosciuto (JSON, XML, etc.) che permette poi al server di eseguire delle query sui dati A differenza delle tabelle di un relazionale è schema-free Basi di Dati e Sistemi Informativi Database NoSQL 8 di 19 Graph Store Rappresentano perfettamente una realtà composta da una fitta rete di connessioni e la modellano sotto forma di nodi e rami di un grafo Nodi e rami possiedono informazioni memorizzate attraverso Key-Value store Per query che soddisfano il modello gerarchico i tempi di esecuzione possono essere 1.000 volte più veloci rispetto agli altri database Basi di Dati e Sistemi Informativi Database NoSQL 9 di 19 Open source, Schema-free, No SQL, Graph Database Basi di Dati e Sistemi Informativi RDBMS Graph Database Tables Graphs Rows Nodes Columns and Data Properties and its values Constraints Relationships Joins Traversal Building block of Neo4j Capacity Nodes Around 35 billion Relationships Around 35 billion Labels Around 275 billion Database NoSQL 10 di 19 Neo4j: Building Blocks Un nodo contiene un set di proprietà espresse come “chiave:valore” Una relazione connette due nodi, può avere a sua volte delle proprietà Le relazioni possono essere unidirezionali o bidirezionali Labels: associano un significato comune ad un insieme di nodi o relazioni Basi di Dati e Sistemi Informativi Database NoSQL 11 di 19 Neo4j CQL: Cypher Query Language Query language per Neo4j Graph Database (pattern-matching) CQL Command/Clause Usage CQL Data Type Usage CREATE To create nodes, relationships and properties boolean boolean literals: true, false MATCH To retrieve data about nodes, relationships and properties byte 8-bit integers short 16-bit integers int 32-bit integers long 64-bit integers float 32-bit floating-point numbers double 64-bit floating-point numbers RETURN To return query results WHERE To provide conditions to filter retrieval data DELETE To delete nodes and relationships REMOVE To delete properties of nodes and relationships ORDER BY To sort retrieval data char 16-bit characters SET To add or update labels String generic strings Basi di Dati e Sistemi Informativi Database NoSQL 12 di 19 CQL CREATE CREATE ( <node-name>:<label-name> { <Property1-name>:<Property1-Value> ........ <Propertyn-name>:<PropertyN-Value> } ) CREATE ( TheMatrix:Movie { title:’The Matrix’, year:1999} ) CREATE ( Keanu:Person { name:’Keanu Reeves’, born:1964} ) Basi di Dati e Sistemi Informativi The Keanu Matrix Reeves Database NoSQL 13 di 19 CQL MATCH, RETURN, WHERE MATCH ( RETURN <node-name>:<label-name> <node-name>.<property1-name>, ) ........ <node-name>.<propertyN-name> MATCH (x:Person) RETURN x.name MATCH (x:Movie) RETURN x.title WHERE <condition> <boolean-operator> <condition> <boolean-operator> := AND, OR, NOT, XOR <condition> := <property-name> <comparison-operator> <value> MATCH (x:Person) WHERE x.born > 1960 RETURN x.name Basi di Dati e Sistemi Informativi Database NoSQL 14 di 19 CQL Relazioni MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>) CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name> {<define-properties-list>}]->(<node2-label-name>) RETURN <relationship-label-name> MATCH (Keanu:Person), (TheMatrix:Movie) CREATE (Keanu)-[:ACTED_IN {role:’Neo’}]->(TheMatrix) The ACTED_IN Matrix Keanu Reeves CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name> {<define-properties-list>}]->(<node2-label-name>) RETURN <relationship-label-name> Basi di Dati e Sistemi Informativi Database NoSQL 15 di 19 CQL SET, REMOVE, DELETE SET <property-name-list> SET clause is used: MATCH (x:Movie) Add new properties to existing Node or Relationship SET x.budget = 1000 Add or Update Properties values REMOVE <property-name-list> REMOVE clause is used: REMOVE <label-name-list> To remove labels or properties of a Node or a Relationship MATCH (x:Movie) REMOVE x.budget DELETE <node-name-list> DELETE <node1-name>,<node2-name>,<relationship-name> MATCH (x:Person) To delete a Node To delete a Node and associated Nodes and Relationships WHERE x.born > 1960 DELETE x Basi di Dati e Sistemi Informativi DELETE clause is used: Database NoSQL 16 di 19 CQL ORDER BY, LIMIT, UNION ORDER BY <property-name-list> [DESC] MATCH (x:Person) RETURN x.name ORDER BY x.born DESC LIMIT <number> MATCH (x:Person) RETURN x.name LIMIT 10 <MATCH Command1> UNION <MATCH Command2> MATCH (x:Actor) RETURN x UNION MATCH (x:Director) RETURN x Basi di Dati e Sistemi Informativi Database NoSQL 17 di 19 CQL Functions Aggregation Functions Relationship Functions COUNT STARTNODE MAX ENDNODE MIN ID SUM TYPE AVG MATCH (x:Movie) RETURN SUM(x.budget) MATCH (a)-[rel:ACTED_IN]->(b) RETURN STARTNODE(rel) Basi di Dati e Sistemi Informativi Database NoSQL 18 di 19 Movie Database Full dataset (12k movies, 50k actors) from TheMovieDB 1) Visualizzare i nomi di tutti gli attori 2) Visualizzare i titoli dei film di tipo “Action” 3) Visualizzare i film con “Milla Jovovich” 4) Visualizzare i film con “Milla Jovovich” ed il nome del regista 5) Visualizzare i nomi degli attori che hanno girato un film con “Milla Jovovich” 6) Visualizzare per ogni attore il numero di film di genere “Comedy” a cui ha partecipato 7) Visualizzare per ogni film il numero di voti ricevuti ed il voto medio Basi di Dati e Sistemi Informativi Database NoSQL 19 di 19