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