Contesto: Di seguito è riportato il libro Graph D Database , che copre un test delle prestazioni menzionato nel libro Neo4j in azione :
Le relazioni in un grafico formano naturalmente percorsi. Interrogazione o spostamento, il grafico prevede i seguenti percorsi. A causa della natura fondamentalmente orientata al percorso del modello di dati, la maggior parte delle operazioni del database dei grafici basate sul percorso sono altamente allineate con il modo in cui i dati sono disposti, rendendoli estremamente efficienti. Nel loro libro Neo4j in Action, Partner e Vukotic eseguono un esperimento usando un negozio relazionale e Neo4j.
Il confronto mostra che il database dei grafici è sostanzialmente più veloce per i dati connessi rispetto a un negozio relazionale. L'esperimento di Partner e Vukotic cerca di trovare amici di amici in un social network, fino a una profondità massima di cinque. Date due persone scelte a caso, esiste un percorso che le collega e che è lungo al massimo cinque relazioni? Per un social network contenente 1.000.000 di persone, ciascuna con circa 50 amici, i risultati suggeriscono fortemente che i database dei grafi sono la scelta migliore per i dati connessi, come vediamo nella Tabella 2-1.
Tabella 2-1 Trovare amici estesi in un database relazionale rispetto a risultati efficienti in Neo4j
Depth RDBMS Execution time (s) Neo4j Execution time (s) Records returned 2 0.016 0.01 ~2500 3 30.267 0.168 ~110,000 4 1543.505 1.359 ~600,000 5 Unfinished 2.132 ~800,000
In profondità due (amici degli amici) sia il database relazionale che il database grafico funzionano abbastanza bene da consentirci di usarli in un sistema online. Mentre la query Neo4j viene eseguita in due terzi del tempo di quella relazionale, un utente finale noterebbe a malapena la differenza in millisecondi tra i due. Quando raggiungiamo la profondità tre (amico-di-amico-di-amico), tuttavia, è chiaro che il database relazionale non può più gestire la query in un lasso di tempo ragionevole: i trenta secondi necessari per il completamento sarebbero completamente inaccettabili per un sistema online. Al contrario, il tempo di risposta di Neo4j rimane relativamente piatto: solo una frazione di secondo per eseguire la query, decisamente abbastanza veloce per un sistema online.
Alla quarta profondità il database relazionale mostra una latenza paralizzante, rendendolo praticamente inutile per un sistema online. Anche i tempi di Neo4j sono leggermente peggiorati, ma la latenza qui è alla periferia di essere accettabile per un sistema online reattivo. Infine, alla profondità cinque, il database relazionale richiede semplicemente troppo tempo per completare la query. Neo4j, al contrario, restituisce un risultato in circa due secondi. Alla quinta profondità, sembra che quasi tutta la rete sia nostra amica: per molti casi d'uso reali, probabilmente potremmo tagliare i risultati e i tempi.
Le domande sono:
- Si tratta di un test ragionevole per emulare ciò che si potrebbe non trovare in un social network? (Significa che i social network reali normalmente hanno nodi con circa 50 amici, ad esempio; sembra che il modello " arricchisci diventa più ricco " sarebbe più naturale per i social network, anche se potrebbe essere sbagliato.)
- Indipendentemente dalla naturalezza dell'emulazione, c'è qualche motivo per credere che i risultati siano spenti o irripetibili?