Alla scoperta dei Graph Database



Documenti analoghi
Linee di evoluzione dei Database

Capitolo 13. Interrogare una base di dati

Introduzione ai database relazionali

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

CONCETTO DI ANNIDAMENTO

Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Basi di Dati Graph Database MARCO DE MASI matr. N

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Il linguaggio SQL: query innestate

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

L architettura di un DBMS

DATABASE RELAZIONALI

Operazioni sui database

Al giorno d oggi, i sistemi per la gestione di database

Algoritmi e strutture dati. Codici di Huffman

Architettura MVC-2: i JavaBeans

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

DBMS (Data Base Management System)

Organizzazione degli archivi

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

User Tools: DataBase Manager

Database. Si ringrazia Marco Bertini per le slides

Ricorsione in SQL-99. Introduzione. Idea di base

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Funzioni in C. Violetta Lonati

Data Warehousing (DW)

Introduzione alla teoria dei database relazionali. Come progettare un database

Informatica 3. LEZIONE 23: Indicizzazione. Modulo 1: Indicizzazione lineare, ISAM e ad albero Modulo 2: 2-3 trees, B-trees e B + -trees

Corso di Sistemi di Elaborazione delle informazioni

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

Dispensa di database Access

Access. P a r t e p r i m a

Corso di Basi di Dati e Conoscenza

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

DATABASE.

Definizione di domini

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

UN PROGRAMMA APPLICATIVO: ACCESS Access è un programma del pacchetto Office che permette di realizzare database

corso di Access MICROSOFT ACCESS Docente: Andrea Mereu Università degli studi di Cagliari 16 aprile 9 maggio 2012

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

Dati relazionali e XML

Cosa è un foglio elettronico

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

Lezione 9. Applicazioni tradizionali

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 12 FEBBRAIO 2015 PARTE 1

Introduzione all Information Retrieval

GERARCHIE RICORSIVE - SQL SERVER 2008

SQL/OLAP. Estensioni OLAP in SQL

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

SQL Server Integration Services. SQL Server 2005: ETL - 1. Integration Services Project

7.4 Estrazione di materiale dal web

Database Manager Guida utente DMAN-IT-01/09/10

Sistemi per la gestione di database: MySQL ( )

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

MongoDB. Un database NoSQL Open-Source

Structured Query Language parte 1

VISUALFLEET Software Overview

Il Sistema Operativo: il File System

Basi Di Dati, 09/12/2003

Introduzione ai Sistemi di Gestione di Basi di Dati XML

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

COGNOME MATRICOLA. Con vincoli di integrita referenziale: INTERVENTO.CodTecnico à TECNICO.Codice INTERVENTO.MatCaldaia à CALDAIA.

Strutturazione logica dei dati: i file

Protezione. Protezione. Protezione. Obiettivi della protezione

Olga Scotti. Basi di Informatica. File e cartelle

HBase Data Model. in più : le colonne sono raccolte in gruppi di colonne detti Column Family; Cosa cambia dunque?

La Gestione delle risorse Renato Agati

SQL - Funzioni di gruppo

Introduzione al Linguaggio C

Concetti fondamentali dei database database Cos'è un database Principali database

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

Esercizio sui data base "Gestione conti correnti"

12. Implementazione di un File System Struttura a livelli Allocazione contigua

Sistemi centralizzati e distribuiti

Passo 2: avviare Access e creare una tabella per ogni tipo di entità Costruire la tabella per l entità cliente.

1. BASI DI DATI: GENERALITÀ

Capitolo Silberschatz

Cultura Tecnologica di Progetto

Il linguaggio SQL: viste e tabelle derivate

Progettazione di Basi di Dati

Per visualizzare e immettere i dati in una tabella è possibile utilizzare le maschere;

Università per Stranieri di Siena Livello A1

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Basi di Dati Corso di Laura in Informatica Umanistica

Esame Basi di Dati. 21 Gennaio 2013

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

DBMS. Esempi di database. DataBase. Alcuni esempi di DBMS DBMS. (DataBase Management System)

Introduzione all Architettura del DBMS

Macchine sequenziali

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro

Transcript:

Alla scoperta dei Graph Database Matteo Pani 24 ottobre 2015

One size doesn t fit all Modellare le relazioni I Graph Database Il Labeled Property Graph Model I Graph-DBMS Neo4j Neo4j Internals Cypher Interagire col DB Profiling delle query Bibliografia Matteo Pani LinuxDay - 24 ottobre 2015 pagina 2 di 48

One size doesn t fit all One size doesn t fit all Matteo Pani LinuxDay - 24 ottobre 2015 pagina 3 di 48

One size doesn t fit all Modellare le relazioni Un esempio di rete Alice Bob Zach Matteo Pani LinuxDay - 24 ottobre 2015 pagina 4 di 48

One size doesn t fit all Modellare le relazioni Con i database relazionali Person PersonFriend Alice ID Person 1 Alice PersonID FriendID 1 2 Bob Zach 2 Bob 2 1 3 Zach 2 3 3 1 Matteo Pani LinuxDay - 24 ottobre 2015 pagina 5 di 48

One size doesn t fit all Modellare le relazioni Con i database relazionali Chi sono gli amici di Bob? SELECT p1. Person FROM Person p1 JOIN PersonFriend ON PersonFriend. AmicoID = p1. ID JOIN Person p2 ON PersonFriend. PersonID = p2. ID WHERE p2. Person = Bob Matteo Pani LinuxDay - 24 ottobre 2015 pagina 6 di 48

One size doesn t fit all Modellare le relazioni Con i database relazionali Chi sono gli amici degli amici di Bob? SELECT p1. Person AS PERSON, p2. Person AS _FRIEND FROM PersonFriend pf1 JOIN Person p1 ON pf1. PersonID = p1.id JOIN PersonFriend pf2 ON pf2. PersonID = pf1. FriendID JOIN Person p2 ON pf2. FriendID = p2.id WHERE p1. Person = Bob AND pf2. FriendID <> p1.id Matteo Pani LinuxDay - 24 ottobre 2015 pagina 7 di 48

One size doesn t fit all Modellare le relazioni Con i database relazionali Non soddisfacente: Join ricorsivi Query in profondità troppo onerose Difficoltà nel dare giusta espressività alle relazioni Il sistema di chiavi esterne costa di per sé Tabelle sparsamente popolate Gestione casi NULL Grande rigidità Talvolta complicato adattare schema a sopraggiunte esigenze Query reciproche troppo costose ( Chi è amico con ) Matteo Pani LinuxDay - 24 ottobre 2015 pagina 8 di 48

One size doesn t fit all Modellare le relazioni I database NoSQL NoSQL (Not Only SQL) Key-Value Store Document Store Column-oriented Graph Database Key/Value Store, Document Store e Column-oriented sono anche detti database Aggregate-oriented Matteo Pani LinuxDay - 24 ottobre 2015 pagina 9 di 48

One size doesn t fit all Modellare le relazioni Con i database NoSQL Aggregate-Oriented name: Alice Alice Bob Zach name: Bob name: Zach Matteo Pani LinuxDay - 24 ottobre 2015 pagina 10 di 48

One size doesn t fit all Modellare le relazioni Con i database NoSQL Aggregate-Oriented name: Alice friends: [Bob] Alice Bob Zach name: Bob friends: [Alice, Zach] name: Zach friends: [Alice] Matteo Pani LinuxDay - 24 ottobre 2015 pagina 11 di 48

One size doesn t fit all Modellare le relazioni Con i database NoSQL Aggregate-Oriented name: Alice friends: [Bob] Alice Bob Zach name: Bob friends: [Alice, Zach] name: Zach friends: [Alice] Matteo Pani LinuxDay - 24 ottobre 2015 pagina 12 di 48

One size doesn t fit all Modellare le relazioni Con i database NoSQL Aggregate-Oriented Chi sono gli amici di Bob? Alice Bob Bob Zach Bob Alice Zach Alice name: Alice name: Bob name: Zach Matteo Pani LinuxDay - 24 ottobre 2015 pagina 13 di 48

One size doesn t fit all Modellare le relazioni Con i database NoSQL Non soddisfacente: uso di chiavi esterne gestione relazioni a carico del software che usa il DB necessità di una struttura navigabile indice globale look-up query reciproche scansione brute-force del DB Matteo Pani LinuxDay - 24 ottobre 2015 pagina 14 di 48

I Graph Database Cosa sono? Cos è un grafo? Si basano sulla teoria dei grafi Grafo struttura matematica formata da un insieme di nodi connessi da un insieme di archi I nodi rappresentano le entità che si vogliono modellare Gli archi rappresentano le relazioni tra di esse (join precalcolati) Matteo Pani LinuxDay - 24 ottobre 2015 pagina 15 di 48

I Graph Database Il Labeled Property Graph Model Definizione il grafo contiene nodi e archi (relazioni) I nodi posseggono delle proprietà (coppie chiave-valore) i nodi possono essere etichettati con una o più label le relazioni hanno un nome (un tipo), un verso ed hanno sempre un nodo di partenza ed uno di arrivo anche le relazioni possono avere delle proprietà (coppie chiave-valore) Matteo Pani LinuxDay - 24 ottobre 2015 pagina 16 di 48

I Graph Database Il Labeled Property Graph Model Modellare una rete con il Labeled Property Graph Model name: Alice User Bob Alice Zach User User name: Bob name: Zach Matteo Pani LinuxDay - 24 ottobre 2015 pagina 17 di 48

I Graph Database I Graph-DBMS Panoramica dei Graph-DBMS Matteo Pani LinuxDay - 24 ottobre 2015 pagina 18 di 48

I Graph Database I Graph-DBMS I Graph-DBMS nativi Storage interno: memorizzano i dati come grafo, senza usare DB relazionali o NoSQL di altro tipo Process Engine: usa la index-free-adjacency, cioè sfrutta i nodi come indici locali piuttosto che usare un indice globale Nei Graph Database nativi le query hanno un costo proporzionale alla porzione di grafo esplorata Matteo Pani LinuxDay - 24 ottobre 2015 pagina 19 di 48

Neo4j Graph-DBMS nativo sviluppato in Java dalla NeoTechnology implementa il Labeled Property Graph Model Open Source: Community (GPLv3), Enterprise (AGPLv3 per progetti Open Source) ultima release stabile: 2.2.6 2.3 Matteo Pani LinuxDay - 24 ottobre 2015 pagina 20 di 48

Neo4j Internals Indici e Schema Label ai nodi (anche a runtime) Indici sulle proprietà dei nodi (eventually available) È possibile definire dei vincoli (e.g. vincolo di unicità) Label e vincoli costituiscono congiuntamente lo schema del grafo, che tuttavia un database Neo4j non è obbligato ad avere Matteo Pani LinuxDay - 24 ottobre 2015 pagina 21 di 48

Neo4j Internals Memorizzazione dei dati Record di dimensione fissata Accesso ai record in O(1): ID * RecordSize Relazioni come liste doppiamente concatenate (relationship chain) Attraversa un arco in entrambi i versi in O(1) Matteo Pani LinuxDay - 24 ottobre 2015 pagina 22 di 48

Neo4j Internals Memorizzazione dei dati Matteo Pani LinuxDay - 24 ottobre 2015 pagina 23 di 48

Neo4j Internals Transazioni Neo4j è transazionale, con rispetto delle proprietà ACID Le transazioni in Neo4j sono semanticamente identiche a quelle dei database relazionali Neo4j scrive i dati secondo la regola Write Ahead Log Il livello di isolamento usato è read committed Matteo Pani LinuxDay - 24 ottobre 2015 pagina 24 di 48

Neo4j Internals Cache File Buffer Cache: si occupa di memorizzare i file di storage nello stesso formato in cui sono salvati su memoria permanente; le scritture su memoria permanente vengono procrastinate Object Cache (presente fino alla release 2.2.6): memorizza nodi, relazioni e proprietà in un formato ottimizzato per navigare velocemente il grafo Reference Cache: sfrutta il più possibile l heap della JVM per memorizzare nodi e relazioni High-Performance Cache (solo Enterprise): assegna una massima quantità di spazio nell heap della JVM e rimuove gli oggetti che crescono oltre questo limite Nella release 2.3 è stata introdotta una cache che opera fuori dall heap. Matteo Pani LinuxDay - 24 ottobre 2015 pagina 25 di 48

Cypher Pattern name: Alice User User name: Bob name: Zach User ( Zach ) <-[: ] -( Alice ) <-[: ]-> ( Bob ) -[: ]->( Zach ) Matteo Pani LinuxDay - 24 ottobre 2015 pagina 26 di 48

Cypher Le clausole indispensabili MATCH specifica il pattern della rete che si sta cercando RETURN specifica quali dati devono essere restituiti dalla query WHERE applica un filtro alla ricerca Matteo Pani LinuxDay - 24 ottobre 2015 pagina 27 di 48

Cypher Chi sono gli amici (degli amici) di Bob? Chi sono gli amici di Bob? MATCH (n) -[r: ]->(m) WHERE n. name = Bob RETURN n, r, m Chi sono gli amici degli amici di Bob? MATCH (n) -[r: *2]->(m) WHERE n. name = Bob RETURN n, r, m Matteo Pani LinuxDay - 24 ottobre 2015 pagina 28 di 48

Profondità tre Matteo Pani LinuxDay - 24 ottobre 2015 pagina 29 di 48 Profondità due Cypher Andiamo in profondità! Profondità di una ricerca: lunghezza di un percorso tra due nodi, calcolata in termini di numero di archi che li separano Profondità zero Profondità uno

Cypher Andiamo in profondità (variabile)! intervallo (da 1 a 3) MATCH (n) -[r* 1..3] -( m) RETURN n, r, m intervallo (minimo 2) MATCH (n) -[r* 2..] -( m) RETURN n, r, m intervallo (massimo 4) MATCH (n) -[r*..4] -( m) RETURN n, r, m Matteo Pani LinuxDay - 24 ottobre 2015 pagina 30 di 48

Cypher Andiamo in profondità (variabile)! qualunque profondità MATCH (n) -[r*]-(m) RETURN n, r, m Matteo Pani LinuxDay - 24 ottobre 2015 pagina 31 di 48

Cypher Ancora sui pattern Nei pattern ciò che non si vuole specificare può essere omesso: () --() () -->() (n) --() () -->(m) Nella MATCH si possono specificare proprietà direttamente nella definizione del pattern: MATCH (n { name : Alice }) RETURN n Matteo Pani LinuxDay - 24 ottobre 2015 pagina 32 di 48

Cypher Ancora sui pattern Possiamo specificare più pattern MATCH (n { name : Bob }) -[r1: ] -(m) MATCH (m) -[r2: ]) -( fof ) RETURN fof Possiamo specificare più path (e un pattern) MATCH (n { name : Bob }) -[r1: ] -(m), (m) -[r2: ]) -( fof ) RETURN fof equivalente a: MATCH (n { name : Bob }) -[r1: ] -(m) -[ r2: ]) -( fof ) RETURN fof Matteo Pani LinuxDay - 24 ottobre 2015 pagina 33 di 48

Cypher Ancora sulla WHERE Espressioni regolari MATCH (n) WHERE n. name =~ Al.* RETURN n Filtrare in base a pattern MATCH (n),(m) WHERE n. name = " Zach " AND (n) -->(m) RETURN n,m Matteo Pani LinuxDay - 24 ottobre 2015 pagina 34 di 48

Cypher Ancora sulla WHERE Se un elemento esiste in una lista (Collection) MATCH (n) WHERE n. name IN [ Alice, Bob, Zach ] RETURN n Matteo Pani LinuxDay - 24 ottobre 2015 pagina 35 di 48

Cypher Piping delle query: la clausola WITH Con WITH si concatenano due query Ad esempio, se vogliamo sapere qual è il nodo che ha più di due relazioni uscenti: MATCH (n) -[r]->(m) WITH n, COUNT ( r) AS NumberOfFriends WHERE NumberOfFriends > 2 RETURN n, NumberOfFriends Matteo Pani LinuxDay - 24 ottobre 2015 pagina 36 di 48

Cypher Chiedo l aiuto da casa (cit.) Con USING È possibile suggerire l uso di indici o label Label hint MATCH (n: User ) USING SCAN n: User WHERE n. surname = Rossi RETURN n Index hint MATCH (n: User ) USING INDEX n: User ( surname ) WHERE n. surname IN [ Rossi ] RETURN n Matteo Pani LinuxDay - 24 ottobre 2015 pagina 37 di 48

Cypher Creare un database Neo4j Per creare nodi e relazioni si usa la clausola CREATE Ad es: creare un nodo CREATE (n) creare un nodo e assegnargli una label CREATE (n: Person ) creare un nodo e assegnargli molteplici label CREATE (n: Person : Italian ) Matteo Pani LinuxDay - 24 ottobre 2015 pagina 38 di 48

Cypher Creare un database Neo4j creare un nodo, assegnargli una label e definire le proprietà CREATE (n: Person { name : Donald, surname : Duck }) Matteo Pani LinuxDay - 24 ottobre 2015 pagina 39 di 48

Cypher Creare un database Neo4j creare una relazione tra due nodi MATCH (a: Person ),(b: Person ) WHERE a. name = NodeA AND b. name = NodeB CREATE (a) -[r: RELTYPE ]->(b) RETURN r creare una relazione tra due nodi e definire le proprietà (ad es. un peso) MATCH (a: Person ),(b: Person ) WHERE a. name = NodeA AND b. name = NodeB CREATE (a) -[r: RELTYPE { weight : 0.5 }] - >(b) RETURN r Matteo Pani LinuxDay - 24 ottobre 2015 pagina 40 di 48

Cypher Creare un database Neo4j creare un path (nodi e relazioni) CREATE (a: User { name : Qui }) -[r1: ]->(b: User { name : Quo }) <-[r2: ]- (c: User { name : Qua }) Abbiamo creato una rete composta da 3 nodi e due relazioni (e definito le proprietà dei nodi) Matteo Pani LinuxDay - 24 ottobre 2015 pagina 41 di 48

Cypher E se non volessimo creare duplicati? La clausola MERGE è una sorta di combinazione tra MATCH e CREATE: crea un path solo se non esiste già Es: Creare il nodo Bob solo se non presente MERGE (n: User { name : Bob }) RETURN n Creare relazione solo se non presente (i nodi devono esistere) MATCH (n: User { name : Zach }), (m: User { name : Alice }) MERGE (n) <-[r: ] -(m) RETURN r Matteo Pani LinuxDay - 24 ottobre 2015 pagina 42 di 48

Cypher E se non volessimo creare duplicati? Creare relazione solo se non presente (i nodi non presenti vengono creati) MERGE (n: User { name : Zach }) MERGE (m: User { name : Alice }) MERGE (n) <-[r: ] -(m) RETURN n,r,m Matteo Pani LinuxDay - 24 ottobre 2015 pagina 43 di 48

Cypher E se non volessimo creare duplicati? con ON CREATE si definiscono le proprietà se il nodo deve essere creato MERGE (n: User { name : Donald }) ON CREATE SET n. surname = Duck RETURN n con ON MATCH si definiscono le proprietà se il nodo è stato trovato MERGE (n: User { name : Donald }) ON MATCH SET n. surname = Duck RETURN n Matteo Pani LinuxDay - 24 ottobre 2015 pagina 44 di 48

Interagire col DB Neo4j Tools Web Interface Neo4j Shell Matteo Pani LinuxDay - 24 ottobre 2015 pagina 45 di 48

Profiling delle query Profiling delle query EXPLAIN: mostra il piano della query ma non la esegue PROFILE: mostra il piano della query, la esegue e tiene traccia del numero della quantità di dati coinvolta e delle interazioni col database Matteo Pani LinuxDay - 24 ottobre 2015 pagina 46 di 48

Bibliografia Bibliografia Robinson I., Webber J., Eifrem E., Graph Databases, O Reilly, 2015 neo4j.com Documentazione di Neo4j (neo4j.com/docs/stable/) Matteo Pani LinuxDay - 24 ottobre 2015 pagina 47 di 48

FINE Matteo Pani LinuxDay - 24 ottobre 2015 pagina 48 di 48