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 Graph evoluzione del metodo key/value dati memorizzati come documenti che possono contenere illimitati campi di illimitata lunghezza dati immagazzinati sotto forma di strutture a grafi, rendendo più performante l accesso a questi da applicativi orientati agli oggetti 2 di 19
DATA VOLUME Data Volume VS Complexity Key-Value Store Column Store Document Store Graph Store RDBMS DATA COMPLEXITY 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 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) 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 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) 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 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 9 di 19
Open source, Schema-free, No SQL, Graph Database RDBMS Tables Rows Columns and Data Constraints Joins Graph Database Graphs Nodes Properties and its values Relationships Traversal Building block of Neo4j Nodes Relationships Labels Capacity Around 35 billion Around 35 billion Around 275 billion 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 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 RETURN WHERE To retrieve data about nodes, relationships and properties To return query results To provide conditions to filter retrieval data byte short int long 8-bit integers 16-bit integers 32-bit integers 64-bit integers DELETE REMOVE To delete nodes and relationships To delete properties of nodes and relationships float double 32-bit floating-point numbers 64-bit floating-point numbers ORDER BY To sort retrieval data char 16-bit characters SET To add or update labels String generic strings 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} ) The Matrix Keanu Reeves 13 di 19
CQL MATCH, RETURN, WHERE MATCH ( ) <node-name>:<label-name> RETURN <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 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 Matrix ACTED_IN Keanu Reeves CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name> {<define-properties-list>}]->(<node2-label-name>) RETURN <relationship-label-name> 15 di 19
CQL SET, REMOVE, DELETE SET <property-name-list> MATCH (x:movie) SET x.budget = 1000 SET clause is used: Add new properties to existing Node or Relationship Add or Update Properties values REMOVE <property-name-list> REMOVE <label-name-list> MATCH (x:movie) REMOVE x.budget REMOVE clause is used: To remove labels or properties of a Node or a Relationship DELETE <node-name-list> DELETE <node1-name>,<node2-name>,<relationship-name> MATCH (x:person) WHERE x.born > 1960 DELETE x DELETE clause is used: To delete a Node To delete a Node and associated Nodes and Relationships 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 17 di 19
CQL Functions Aggregation Functions COUNT MAX MIN SUM Relationship Functions STARTNODE ENDNODE ID TYPE AVG MATCH (x:movie) RETURN SUM(x.budget) MATCH (a)-[rel:acted_in]->(b) RETURN STARTNODE(rel) 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 19 di 19