Qual è la differenza tra un database a grafo e un database relazionale?
Sia i database a grafo che quelli relazionali archiviano elementi di dati correlati con relazioni, ma rappresentano le relazioni tra i dati in modo molto diverso. I database relazionali archiviano i dati in un formato tabellare con righe e colonne. Tutti i dati vengono inoltre archiviati in tabelle e le relazioni tra i dati vengono archiviate come riferimenti rappresentati alla tabella originale (ovvero chiavi esterne). In fase di esecuzione, un database relazionale utilizza le istruzioni JOIN per risolvere esplicitamente questi riferimenti. Sebbene la maggior parte dei database relazionali sia in grado di eseguire questa operazione in modo efficiente su determinate scale, operazioni di questo tipo diventano poco efficienti quando è necessario elaborare un numero elevato o sconosciuto di questi riferimenti, come quando si desidera trovare collegamenti tra un numero sconosciuto di connessioni, ad esempio per scoprire come due persone sono collegate in un social network.
Al contrario, un database a grafo archivia i dati come una rete di entità e relazioni. I database a grafo memorizzano esplicitamente sia i dati dell'entità che quelli delle relazioni, invece di archiviarli come riferimenti. In fase di esecuzione, un database a grafo sfrutta la teoria matematica dei grafi per eseguire in modo efficiente operazioni su entità e relazioni. Poiché le relazioni tra le entità sono archiviate in modo esplicito e non calcolato, i database a grafo sono più efficienti nell'esecuzione di query e nella gestione della memoria per i casi d'uso con interconnessioni di dati complesse, il che può migliorare significativamente le prestazioni delle applicazioni.
Ulteriori informazioni sui database relazionali »
Maggiori informazioni sui database a grafo
Modello di dati: database a grafo e database relazionale
Sia i database a grafo che quelli relazionali archiviano le informazioni e rappresentano le relazioni tra i dati. Tuttavia, il modello relazionale dà priorità alle entità di dati mentre il modello a grafo dà priorità alle relazioni tra le entità.
Il modello del database relazionale
I database relazionali utilizzano tabelle di dati che organizzano le informazioni in righe e colonne. Le colonne contengono attributi specifici dell'entità dati, mentre le righe rappresentano i singoli record di dati.
Lo schema fisso dei database relazionali richiede di delineare in anticipo le relazioni tra le tabelle con chiavi primarie ed esterne.
Esempio
Prendi in considerazione un'applicazione di social media con profili di clienti che possono essere amici tra loro. Un modello tipico richiederebbe due tabelle per modellare i dati.
La tabella dei clienti potrebbe apparire così:
ID |
Nome |
Luogo |
C1 |
Alejandro |
Stati Uniti |
C2 |
Ana |
Stati Uniti |
C3 |
Kwaku |
Stati Uniti |
C4 |
Pat |
Stati Uniti |
La tabella degli amici potrebbe apparire così:
ID cliente |
ID amico |
C1 |
C2 |
C1 |
C3 |
C2 |
C4 |
C2 |
C1 |
C3 |
C1 |
C3 |
C4 |
Al momento della query, se si desidera ricevere una risposta a una domanda simile a “Come si chiamano gli amici di Alejandro?”, per prima cosa il motore di database troverebbe la riga corrispondente ad Alejandro nella tabella dei clienti.
ID |
Nome |
Luogo |
C1 |
Alejandro |
Stati Uniti |
Successivamente, il motore creerebbe un'unione di tutte le righe nella tabella degli amici di Alejandro utilizzando il suo ID
ID |
Nome |
Luogo |
ID cliente |
ID amico |
C1 |
Alejandro |
Stati Uniti |
C1 |
C2 |
C1 |
Alejandro |
Stati Uniti |
C1 |
C3 |
Ora, per ogni riga, il motore creerebbe un'unione con la tabella cliente per ogni ID amico
ID |
Nome |
Luogo |
ID cliente |
ID amico |
ID |
Nome |
Luogo |
C1 |
Alejandro |
Stati Uniti |
C1 |
C2 |
C2 |
Ana |
Stati Uniti |
C1 |
Alejandro |
Stati Uniti |
C1 |
C3 |
C3 |
Kwaku |
Stati Uniti |
Infine, il motore restituisce i nomi dei suoi amici.
Nome |
Ana |
Kwaku |
Come possiamo vedere, quando utilizziamo le connessioni nei nostri dati relazionali, finiamo per costruire una grande struttura di dati per rappresentare le informazioni che desideriamo recuperare. I database relazionali sono ottimizzati per ridurre al minimo l'impatto di queste strutture. Tuttavia, man mano che il numero di unioni aumenta, anche la quantità di dati richiesti aumenta in modo significativo, riducendo le prestazioni e aumentando l'utilizzo della memoria.
Il modello del database a grafo
Al contrario, un database a grafo utilizza una struttura a grafo con attributi, relazioni e oggetti per rappresentare i dati. I nodi sono oggetti, gli edge dimostrano la relazione tra tali nodi e le proprietà descrivono gli attributi dei nodi e degli edge. Questa struttura dinamica rende un database a grafo utile per la rappresentazione connessa dei dati. Offre maggiore flessibilità per quanto riguarda le relazioni e i tipi di dati.
Esempio
Utilizzando lo stesso esempio di dati sui social network già utilizzato sopra, il nostro database a grafo memorizzerebbe i dati utilizzando 3 nodi, ciascuno con 4 proprietà e 2 edge.
Ora vediamo come un database a grafo elabora la query “Come si chiamano gli amici di Alejandro?”.
Innanzitutto, cerchiamo il nodo cliente che rappresenta Alejandro (evidenziato di seguito).
Successivamente, attraversiamo o ci spostiamo negli edge degli amici. L'attraversamento in un database a grafo è simile all'esecuzione di un JOIN in un database relazionale, a differenza della mancata conservazione delle informazioni precedenti nella query, a meno che non sia esplicitamente richiesto. Nel nostro esempio, vengono conservati nella memoria solo i due edge degli amici.
In seguito, continuiamo il nostro attraversamento verso i nodi adiacenti.
Infine, il motore restituisce i nomi dei suoi amici.
Nome |
Ana |
Kwaku |
Come possiamo vedere, entrambi i motori sono in grado di restituire le stesse informazioni. Tuttavia, quando si attraversano molte connessioni, l'archiviazione esplicita delle relazioni in un database a grafo consente di elaborare questa richiesta in modo più efficiente. Sebbene questo vantaggio non sia significativo per le query semplici, come quella illustrata qui, questa ottimizzazione, insieme alla struttura dei linguaggi di query a grafo, può ridurre significativamente la complessità e l'utilizzo della memoria per l'elaborazione di domande che richiedono un numero sconosciuto o molteplici attraversamenti di relazioni.
Differenze principali tra database a grafo e database relazionale
Oltre ai diversi modelli di dati, i database relazionali e a grafo presentano molte differenze che li distinguono in termini di funzionalità e utilità.
Esecuzione di query
I database a grafo utilizzano linguaggi di query personalizzati e ottimizzati per trovare e recuperare rapidamente i dati connessi. Questi linguaggi, come TinkerPop Gremlin, openCypher e SPARQL, sono progettati appositamente per semplificare la scrittura di query che sfruttano interconnessioni di dati complesse, come quelle necessarie per operazioni come l'accesso ricorsivo ai dati, la ricerca di percorsi e algoritmi grafici.
Al contrario, i database relazionali utilizzano SQL per recuperare e manipolare i dati. Con SQL, gli utenti possono eseguire sulle tabelle vari tipi di query, come SELEZIONA, INSERISCI, AGGIORNA e ELIMINA. I database relazionali eccellono nella gestione di dati strutturati con relazioni ben definite tra le tabelle. Sono particolarmente efficaci nell'eseguire filtri, aggregazioni e join complessi su più tabelle.
Prestazioni
I database a grafo memorizzano sia gli oggetti che le relazioni come dati e utilizzano gli indici per spostarsi in modo efficiente tra le entità correlate. Dato che i database a grafo archiviano le relazioni come dati, il database può navigare rapidamente tra le entità senza la necessità di calcolare queste connessioni in modo dinamico. La connessione diretta tra i nodi consente l'accesso immediato, in modo da poter interrogare e tracciare rapidamente le relazioni. Queste funzionalità rendono i database a grafo molto efficienti.
In alternativa, i database relazionali utilizzano ricerche negli indici e le unioni calcolate in modo dinamico per identificare le relazioni tra le entità. È possibile unire più tabelle, ma questo richiede molto tempo in quanto il sistema deve scansionare indici più grandi su più dati. Per questo motivo, un database relazionale non offre le stesse prestazioni di quello a grafo per i casi d'uso in cui è richiesto un numero elevato di connessioni per il recupero dei dati richiesti.
Facilità d'uso
I database a grafo sono incentrati sulle relazioni e questo aspetto ne semplifica l'impiego quando si utilizzano dati connessi. Questi database eccellono nelle query multi-hop, in cui si attraversano percorsi con più relazioni. È anche possibile utilizzare linguaggi di query grafica come SPARQL, Gremlin o openCypher per esprimere query che esplorano dati interconnessi con una sintassi semplice e specifica per i grafi.
I database relazionali utilizzano SQL, che può risultare innaturale quando si gestiscono query multi-hop. Se una query ha più join e si estende su sottoquery annidate, l'SQL diventa difficile da scrivere. Se non si presta attenzione, questo può facilmente tradursi in query ingombranti che sono difficili da leggere e gestire.
Detto questo, i database relazionali sono maturi e ampiamente utilizzati in vari casi d'uso. Esistono vari strumenti e risorse, oltre al supporto della community, a cui puoi accedere per ottimizzare il tuo sistema.
Quando usare un database a grafo e quando usare un database relazionale
I database a grafo e relazionali hanno molti casi d'uso in cui sono efficaci. Poiché prevedono vari modelli di dati e varie distinzioni fondamentali, eccellono in diverse aree.
Database a grafo
Il database a grafo fornisce uno schema flessibile che consente modifiche e adattamenti dinamici ai dati. L'attenzione alle relazioni tra i dati lo rende utile nell'analisi, nelle ricerche semantiche o nei motori di raccomandazione. Un database a grafo è la scelta migliore nei seguenti scenari:
- Stai lavorando con dati che hanno relazioni complesse, come nei social network, nel rilevamento delle frodi, nei grafi della conoscenza e della sicurezza, o nei motori di raccomandazioni personalizzate
- Hai bisogno di uno schema in evoluzione, in quanto puoi modificare edge, nodi e proprietà senza disturbare il resto della struttura del database
- Stai lavorando con dati interconnessi e devi effettuare un numero sconosciuto di salti o salti multipli tra le relazioni (query del tipo “amico dell'amico”)
I database a grafo sono flessibili, dimensionabili, dinamici ed eccellenti nel mostrare le relazioni tra i dati.
Database relazionali
I database relazionali offrono uno schema strutturato con un ottimo supporto per l'integrità dei dati. Un database relazionale è la scelta migliore nei seguenti scenari:
- Hai bisogno di essere conforme alla logica ACID e ad alti livelli di integrità e coerenza dei dati, come nelle transazioni finanziarie
- Stai lavorando con dati altamente strutturati che si adattano bene al modello di dati tabulare, come nella gestione delle risorse aziendali
- I tuoi dati hanno relazioni limitate
Riepilogo delle differenze tra database relazionale e database a grafo
Database relazionali |
Database grafici |
|
Modello |
Tabellare con righe e colonne. |
Nodi interconnessi con dati rappresentati come nodi ed edge |
Operatività |
Operazioni SQL come creazione, lettura, aggiornamento ed eliminazione (CRUD). |
Le operazioni includono CRUD e operazioni di attraversamento di grafi |
Prestazioni |
I database relazionali spesso devono gestire query complesse che coinvolgono attraversamenti di relazioni, il che può avere un impatto negativo sulle prestazioni. |
Un database a grafo eccelle nel rappresentare e interrogare le relazioni tra dati connessi. |
Facilità d'uso |
I database relazionali funzionano bene con set di dati di grandi dimensioni e dati strutturati. Hanno difficoltà con le query multi-hop. |
Quando si lavora con dati basati sulle relazioni, l'utilizzo di un database a grafo risulta semplice e intuitivo. Utilizzando un linguaggio di query a grafo, è possibile eseguire query su più nodi di dati in modo rapido ed efficiente. |
In che modo AWS può aiutarti con i tuoi requisiti relativi ai database relazionali e a grafo?
Amazon Web Services (AWS) offre soluzioni per casi d'uso di database relazionali e a grafo.
Database relazionali
Amazon Relational Database Service (Amazon RDS) è un servizio gestito che consente di configurare, utilizzare e scalare un database relazionale nel cloud con la massima semplicità. Questo servizio offre una capacità ridimensionabile a un costo conveniente, gestendo al tempo stesso le attività di amministrazione del database più dispendiose in termini di tempo. Amazon RDS supporta vari motori di database, come i seguenti:
- Amazon Relational Database Service (Amazon RDS) per SQL Server
- Amazon Relational Database Service (Amazon RDS) per MySQL
- Amazon Relational Database Service (Amazon RDS) per MariaDB
- Amazon Relational Database Service (Amazon RDS) per Oracle
- Amazon Relational Database Service (Amazon RDS) per PostgreSQL
- Amazon Relational Database Service (Amazon RDS) per Db2
Amazon Aurora è un servizio di database relazionale moderno che offre prestazioni e disponibilità elevata su vasta scala ed edizioni compatibili con MySQL e PostgreSQL totalmente open source. Aurora è anche un servizio completamente gestito che automatizza le attività di amministrazione che richiedono tempo come il provisioning dell'hardware, l'impostazione del database, l'applicazione delle patch e i backup, fornendo al contempo la sicurezza, la disponibilità e l'affidabilità dei database commerciali a un decimo del costo.
Database grafici
Amazon Neptune è un motore di database a grafo progettato appositamente e ad alte prestazioni. È stato ottimizzato per archiviare miliardi di relazioni e consente di interrogare il grafo con latenza nell'ordine dei millisecondi.
Neptune supporta i modelli a grafo più diffusi, come il grafo delle proprietà e il Resource Description Framework (RDF) del W3C. Supporta anche linguaggi di query come Gremlin e SPARQL, in modo da poter creare query che esplorano set di dati altamente connessi.
Neptune offre varie funzionalità:
- È ad alta disponibilità, con repliche di lettura, ripristino point-in-time, backup continuo e replica nelle zone di disponibilità.
- È un sistema sicuro che supporta la crittografia dei dati a riposo.
- È completamente gestito. Pertanto, non sarà più necessario preoccuparsi delle attività di gestione generica del database quali provisioning dell'hardware, applicazione di patch software, impostazione, configurazione o backup.
Inizia subito a utilizzare database a grafo e relazionali su AWS creando un account.