Neo4J
Fonti: www.neo4j.com, Wikipedia , Big Data Tech ,Big Data For Dummies (), vari articoli sul web, TEST PRATICI …
Database a grafo in un ambiente di grandi quantità di dati
Sviluppatore
Neo Technology, Inc.
Data prima versione
2007
Ultima versione
3.0.2 (2 giugno 2016)
Sistema operativo
Multipiattaforma
Linguaggio
Java
Genere
Software per basi di dati
Licenza
GNU General Public License 3 e GNU Affero General Public License (licenza
libera) + versione commerciale con supporto
Sito web
neo4j.org
neo4j.com
Partner SMC:
Big Data Tech (partner e rivenditore), Larus (via RIOS)
http://www.bigdatatech.it/portfolio-items/neo4j/
http://www.larus-ba.it/neo4j/
http://www.reteitalianaopensource.net/prodotti
INTRO
Neo4J è uno dei database a grafo più usati in ambito Big Data; è un progetto open source con licenza GNU
public v 3.0 (esiste una versione supportata commerciale fornita dalla Neo Technology).
La struttura fondante per i database a grafo è la "node-relationship"; la memorizzazione e la navigazione
avviene utilizzando dei nodi, le loro relazioni e le loro proprietà.
I grafi rappresentano uno dei modi più efficienti e naturali di lavorare con i dati: sono estremamente intuitivi
e mostrano l’interconnessione di concetti e idee. Attraverso Neo4j è possibile superare le costruzioni
ordinate dei DB relazionali, semplificando la navigazione tra i dati in memoria, promuovendo analisi in realtime e semplificando lo sviluppo di modelli rappresentativi di infrastrutture del mondo reale, servizi business,
relazioni sociali, che per loro natura natura sono fluidi e monodimensionali. Neo4j aiuta nella gestione di
grandi moli di dati, ad esempio con problematiche relative a Big Data, BI e IoT.
CARATTERISTICHE PROPAGANDATE
Intuitività (nel creare e mantenere i dati)  relazioni tra i dati come nella realtà
Velocità (di sviluppo – vedi intuitività - e di esecuzione)  intuitività= velocità di sviluppo, + performance
eccezionali sfruttando la struttura nodi relazioni
Agilità (velocità di risposta al cambiamento)  nuova proprietà= basta aggiungerla alle relazioni + codice
semplice rispetto a SQL=chiarezza nel codice e semplicità di modifica
DESCRIZIONE
Neo4j è un database a grafo open source sviluppato interamente in Java. È totalmente transazionale, che
viene solitamente integrato nelle applicazioni permettendone il funzionamento stand alone; memorizza
tutti i dati in una cartella. È stato sviluppato dalla Neo Technology (Svezia).
Il software è scaricabile dal sito del produttore ed installabile in locale su pc. Può essere usato sia in
modalità embedded che server:


Librerie java, ruby, php, ecc…
Interfaccia web di gestione ed interrogazione
Neo4J supporta un linguaggio dichiarativo chiamato Cypher, progettato specificamente per interrogare i
grafi ed i loro componenti. I comandi Cypher sono vagamente basati sulla sintassi SQL e sono pensati per le
query ad hoc di dati del grafo.
In generale i database a grafo sono navigabili utilizzando le relazioni. In Neo4J nodi e relazioni supportano
le “proprietà”, una coppia chiave-valore dove vengono memorizzati i dati. Questo tipo di memorizzazione e
di navigazione non è possibile con un RDBMS (database relazionali) a causa delle rigide strutture di tabella e
all'incapacità di seguire i collegamenti tra i dati in qualunque direzione possibile.
Una volta aperta una transazione è possibile creare nodi e assegnarvi delle proprietà, ossia dei valori
corrispondenti ai tipi di dato elementari e identificati grazie a un nome. Inoltre è possibile unire dei nodi
tramite le relazioni, ognuna identificata da un “tipo”. Anche le relazioni possono avere delle proprietà come
i nodi. Il grafo è quindi privo di schema, il che da un lato permette di definire dati molto eterogenei con il
minimo sforzo e dall'altro può creare problemi di consistenza dei dati (demandata interamente al
programmatore o all'applicazione).
Vantaggi
La struttura a grafo di Neo4j si mostra estremamente comoda ed efficiente nel trattare strutture come gli
alberi estratte ad esempio da file XML, filesystem e reti, che ovviamente vengono rappresentate con
naturalezza da un grafo poiché sono esse stesse dei grafi. L'esplorazione di queste strutture risulta in
genere più veloce rispetto a un database a tabelle perché la ricerca di nodi in relazione con un certo nodo è
un'operazione primitiva e non richiede i passaggi tipici di SQL (join tra tabelle diverse). Ogni nodo contiene
l'indice delle relazioni entranti e uscenti da esso, quindi la velocità di attraversamento del grafo non risente
delle dimensioni complessive ma solo della densità dei nodi attraversati. Esistono delle implementazioni già
pronte per le operazioni più comuni sui grafi, come la ricerca del cammino minimo tra due nodi.
Svantaggi
Neo4j risulta scomodo rispetto a un database a tabelle interrogabile tramite query SQL nelle ricerche
complesse, per esempio basate su confronti matematici tra i campi delle tuple, e di conseguenza sulle
modifiche di massa basate su tali ricerche. Non esistono infatti analoghi dell'UPDATE offerto dai sistemi
SQL, che risulta pesante per quanto riguarda le modifiche massicce del grafo. Neo4j inoltre non offre
funzioni per memorizzare dati binari come audio, video o grossi blocchi di testo, che devono essere salvati
in un filesystem o in un altro database memorizzando nel grafo un riferimento. Anche se un database neo4j
può contenere fino a 32 miliardi di nodi, l'impossibilità di effettuare lo sharding dei dati lo rende poco
adatto per i lavori su più cluster; sembra siano disponibili in fase sperimentale architetture basate su
Hadoop.
Caratteristiche di Neo4J da verificare
Integrazione con altri database: Neo4J supporta la gestione delle transazioni con rollback per consentire la
perfetta interoperabilità con archivi dati.
Servizi di sincronizzazione: Neo4J supporta comportamenti basati sugli eventi tramite un bus di eventi,
sincronizzazione periodica utilizzando sé stesso o un RDBMS come master e sincronizzazione batch
tradizionale.
Resilienza: Neo4J supporta backup a freddo (vale a dire quando il database non è in esecuzione) e a caldo
(quando è in esecuzione), così come una modalità di clustering ad alta disponibilità. Sono gestiti alert
standard per l'integrazione con eventuali sistemi esistenti di operation management.
Ambiti di applicazione
L’implementazione di Neo4J è adatta per



social networking
Classificazione dei dati biologici o medicali
Creazione dinamica delle comunità di interesse
A esempio un database a grafo potrebbe essere utilizzato per:
 gestire dati geografici per esplorazioni petrolifere o per modellare e ottimizzare le reti di un
provider di telecomunicazioni.
 Suggerimenti (es. di articoli da comprare – altri utenti hanno visto anche…)
 Master data management (relazioni tra persone e/o dimensioni es. capi area, venditori, zone,
clienti)
 Ricerca frodi (relazionando persone, luoghi, conti e transazioni tra persone)
 Ricerche complesse sui siti (basate sulle relazioni e non sui contenuti indicizzati)
 Gestione di reti e operazioni IT (previsione di blocchi ed inefficienze)
 Gestione identità e accessi
CONCETTO DI NODI E RELAZIONI
METODI DI UTILIZZO