Base di dati a grafo

Da Wikipedia, l'enciclopedia libera.
GraphDatabase PropertyGraph.png

Una base di dati a grafo, o database a grafo, usa nodi e archi per rappresentare e archiviare l'informazione. La rappresentazione dei dati mediante grafi offre un'alternativa al modello relazionale che fa uso di tabelle, ai database orientati al documento (che usano documenti), o altri, come i sistemi ad archivi strutturati (structured storage) basati su colonne o su cesti non interpretati di dati.

I database a grafo sono spesso più veloci di quelli relazionali nell'associazione di insiemi di dati, e mappano in maniera più diretta le strutture di applicazioni orientate agli oggetti. Scalano più facilmente a grandi quantità di dati e non richiedono le tipiche e onerose operazioni di unione (join). Dipendono meno da un rigido schema entità-relazione e sono molto più adeguati per gestire dati mutevoli con schemi evolutivi. Al contrario, i database relazionali sono tipicamente più veloci nell'eseguire le stesse operazioni su un grande numero di dati.

Modelli di riferimento[modifica | modifica wikitesto]

Quando si parla di modelli dei dati basati su grafo è inevitabile fare riferimento alla teoria dei grafi. In origine, i modelli di riferimento per l'implementazione dei database a grafo erano due: il property graph model e il resource description framework graph (RDF). Il primo fa riferimento principalmente al progetto Tinkerpop, mentre il secondo è il modello di riferimento del Web semantico. I database a grafo che utilizzano il modello RDF sono anche noti come Triple Store, Quad Store, o RDF Store.

I due modelli non sono del tutto coincidenti, anche se solitamente il passaggio da uno all'altro è molto intuitivo. Per entrambi esistono dei linguaggi di interrogazione specifici, ma solo per RDF esiste uno standard riconosciuto in SPARQL. Successivamente ne sono stati sviluppati altri, di seguito i modelli ad oggi esistenti,

  • Modello dei dati di grafo basico: grafo diretto con nodi e archi etichetti da qualche vocabolario (Es. Gram)[1]
  • Modello dei dati a ipernodo: Si basa sulla generalizzazione di grafo: con ipernordi e iperarchi, permette la creazione di oggetti complessi,dipendenze funzionali e eredità strutturale multipla[1]
  • Modello dei dati a ipernodo con grafi annidati: modello in cui ad un ipernodo può essere esso stesso un grafo[1]
  • Modello dei dati RDF: modello raccomandato dal W3C per rappresentare metadati[1]
  • Modello dei dati del grafo di Proprietà: modello di multigrafo diretto, etichettato, con attributi (proprietà) e con archio multipli tra i nodi (Neo4j, Sparksee/DEX, InfiniteGraph)[1]

Interrogazioni delle basi di dato a grafo[modifica | modifica wikitesto]

Di seguito le tipologie di interrogazioni usate nelle basi di dato a grafo[1]:

  • Pattern matching query (interrogazione per il riscontro di una configurazione)

Esempio: restituire le persone che in cui l'attributo nome è “James”.

## SPARQL 1.0 and SPARQL 1.1
SELECT ?X
FROM <http://www.socialnetwork.org>
WHERE { ?X sn:firstName "James" }
## G-SPARQL
SELECT ?X
WHERE { ?X @firstName "James" }
## CYPHER
MATCH (person:Person)
WHERE person.firstName="
  • Adjacency query (interrogazione di adiacenza)
  • Reachbility query (Interrogazione di raggiungibilità)

Esempio: trovare il nome delle personee che possono essere raggiunte da “James” dalla relazione “knows” (sa, sapere)).

## SPARQL 1.1
PREFIX sn: <http://www.socialnetwork.org/>
SELECT ?N
WHERE { ?X sn:type sn:Person . ?X sn:firstName "James" .
?X sn:knows* ?Y .
?Y sn:firstName ?N }
DRAFT
## G-SPARQL
SELECT ?N
WHERE { ?X @type "Person" . ?X @firstName "James" .
?X knows* ?Y .
?Y @firstName ?N }
## CYPHER
MATCH (james:Person)-[:knows*]-(reachablePerson:Person)
WHERE james.firstName="James"
RETURN DISTINCT reachablePerson
  • Graph Analytical query (interrogazione analitica del grafo)

Che si declinano nei linguaggi: SPARQL, G-SPARQL e Cypher[1].

Sistemi di gestione delle basi di dato a grafo[modifica | modifica wikitesto]

I sistemi di gestione delle basi di dato a grafo (Graph Database Management System) si classificano in due categorie: Basi di dato a grafo, e framework elaboratori di grafi (graph processing framework)[1]. I primi hanno l'obiettivo di gestire in maniera persistente il dato permettendo di archiviare transazionalmente e di accedervi in maniera persistente i secondi invece forniscono processi di batch e analisis su grandi grafi spesso in un ambiente distribuito con molte macchine[1].

Base di dato a grafo[modifica | modifica wikitesto]

Di seguito basi di dato a grafo native:

  • AllegroGraph [3],
  • Bitsy [9],
  • Cayley
  • GraphBase
  • Graphd
  • HyperGraphDB
  • IBM System G
  • imGraph
  • InfiniteGraph
  • InfoGrid
  • Neo4j
  • Sparksee/DEX
  • Trinity
  • TurboGraph

Di seguito basi di dato a grafo non native:

  • Titan che supporta: Apache Cassandra, Apache HBase e Oracle BerkeleyDB
  • FlockDB è una base di dati distribuita orientata al grafo che usa MySQL come motore;
  • OrientDB
  • ArangoDB
  • OQGRAPH che è un motore computazionale di grafo per MySQL, MariaDB e Drizzle
  • VelocityGraph: Base di dati ad oggetti che supporta i grafi
  • Horton

Framework elaboratori di grafi[modifica | modifica wikitesto]

sistemi analitici a grafi non in rete:

Sistemi di elaborazione di dati generici anche per grafi:

Progetti di database a grafo[modifica | modifica wikitesto]

Di seguito un elenco di vari progetti su basi di dati a grafo molto conosciuti:

  • AllegroGraph
  • ArangoDB
  • DEX - un database a grafo ad alte prestazioni
  • HyperGraphDB - un database a grafo open source (LPGL) che supporta ipergrafi generalizzati dove gli archi possono puntare ad altri archi
  • HyperGraphDB
  • IBM System G Native Store
  • InfoGrid - una base di dati a grafo open source (AGPLv3) con interfaccia web
  • Neo4j - un database a grafo commerciale e open source (AGPLv3)[2]
  • OhmDB
  • Ontotext GraphDB
  • OpenLink Virtuoso
  • Oracle Spatial and Graph
  • OrientDB - database orientato al documento, ma con una gestione ottimizzata delle relazioni fra documenti come avviene in un database a grafo. Il linguaggio di query SQL like contiene estensioni per la gestione di alberi e grafi. Open source con licenza commercial friendly (Apache License)
  • Teradata Aster
  • VertexDB

Note[modifica | modifica wikitesto]

  1. ^ a b c d e f g h i An introduction to Graph Data Management di Renzo Angles e Claudio Gutierrez
  2. ^ Neo Technology | Neo4j: The World’s Leading Graph Database - Neo4j Product Overview

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica