Contexte: Ce qui suit est tiré du livre Graph Databases , qui couvre un test de performance mentionné dans le livre Neo4j in Action :
Les relations dans un graphique forment naturellement des chemins. L'interrogation ou la traversée du graphique implique de suivre les chemins. En raison de la nature fondamentalement orientée chemin du modèle de données, la majorité des opérations de base de données de graphiques basées sur le chemin sont très alignées sur la façon dont les données sont disposées, ce qui les rend extrêmement efficaces. Dans leur livre Neo4j in Action, Partner et Vukotic effectuent une expérience en utilisant un magasin relationnel et Neo4j.
La comparaison montre que la base de données graphique est beaucoup plus rapide pour les données connectées qu'un magasin relationnel.L'expérience de Partner et Vukotic cherche à trouver des amis d'amis dans un réseau social, jusqu'à une profondeur maximale de cinq. Étant donné deux personnes choisies au hasard, y a-t-il un chemin qui les relie qui est au maximum de cinq relations? Pour un réseau social contenant 1 000 000 de personnes, chacune avec environ 50 amis, les résultats suggèrent fortement que les bases de données graphiques sont le meilleur choix pour les données connectées, comme nous le voyons dans le tableau 2-1.
Tableau 2-1. Trouver des amis étendus dans une base de données relationnelle contre une recherche efficace dans 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
En profondeur deux (amis d'amis), la base de données relationnelle et la base de données graphique fonctionnent assez bien pour que nous puissions envisager de les utiliser dans un système en ligne. Alors que la requête Neo4j s'exécute aux deux tiers du temps de la relationnelle, un utilisateur final remarquerait à peine la différence en millisecondes entre les deux. Au moment où nous atteignons la profondeur trois (ami-ami-ami-ami), cependant, il est clair que la base de données relationnelle ne peut plus traiter la requête dans un délai raisonnable: les trente secondes qu'il faut pour terminer seraient complètement inacceptables pour un système en ligne. En revanche, le temps de réponse de Neo4j reste relativement plat: juste une fraction de seconde pour effectuer la requête - certainement assez rapide pour un système en ligne.
À la profondeur quatre, la base de données relationnelle présente une latence rédhibitoire, la rendant pratiquement inutile pour un système en ligne. Le timing de Neo4j s'est un peu détérioré aussi, mais la latence ici est à la périphérie d'être acceptable pour un système en ligne réactif. Enfin, à la profondeur cinq, la base de données relationnelle prend simplement trop de temps pour terminer la requête. Neo4j, en revanche, renvoie un résultat en environ deux secondes. À la profondeur cinq, il apparaît que presque tout le réseau est notre ami: pour de nombreux cas d'utilisation réels, nous couperions probablement les résultats et les délais.
Les questions sont:
- Est-ce un test raisonnable pour émuler ce que l'on pourrait, sauf pour trouver dans un réseau social? (Cela signifie que les vrais réseaux sociaux ont normalement des nœuds avec environ 50 amis par exemple; il semble que le modèle " riche devient plus riche " serait plus naturel pour les réseaux sociaux, bien qu'il puisse être faux.)
- Indépendamment du caractère naturel de l'émulation, y a-t-il une raison de croire que les résultats sont erronés ou non reproductibles?