Comparaison des bases de données relationnelles et des bases de données graphiques

Quelqu’un peut-il m’expliquer les avantages et les inconvénients d’une firebase database relationnelle telle que MySQL par rapport à une firebase database graphique telle que Neo4j?

En SQL, vous avez plusieurs tables avec différents identifiants les reliant. Ensuite, vous devez vous connecter pour connecter les tables. Du sharepoint vue d’un débutant, pourquoi devriez-vous concevoir la firebase database pour exiger une jointure plutôt que d’avoir les connexions explicites en tant que bordures dès le départ avec une firebase database graphique. Conceptuellement, cela n’aurait aucun sens pour un débutant. Il y a probablement une raison très technique mais non conceptuelle à cela?

Il y a en fait un raisonnement conceptuel derrière les deux styles. Wikipedia sur le modèle relationnel et les bases de données graphiques en donne de bons aperçus.

La principale différence réside dans le fait que dans une firebase database de graphes, les relations sont stockées au niveau de l’enregistrement individuel, tandis que dans une firebase database relationnelle, la structure est définie à un niveau supérieur (les définitions de la table).

Cela a des ramifications importantes:

  • Une firebase database relationnelle est beaucoup plus rapide lorsque vous utilisez un grand nombre d’enregistrements. Dans une firebase database de graphes, chaque enregistrement doit être examiné individuellement lors d’une requête afin de déterminer la structure des données, alors que cela est connu à l’avance dans une firebase database relationnelle.
  • Les bases de données relationnelles utilisent moins d’espace de stockage, car elles n’ont pas besoin de stocker toutes ces relations.

Le fait de stocker toutes les relations au niveau de l’enregistrement individuel n’a de sens que s’il ya beaucoup de variation dans les relations; sinon vous ne faites que dupliquer les mêmes choses encore et encore. Cela signifie que les bases de données de graphes sont bien adaptées aux structures complexes et irrégulières. Mais dans la réalité, la plupart des bases de données requièrent des structures régulières, relativement simples. C’est pourquoi les bases de données relationnelles prédominent.

La principale différence entre une firebase database graphique et une firebase database relationnelle réside dans le fait que les bases de données relationnelles fonctionnent avec des ensembles, tandis que les bases de données graphiques fonctionnent avec des chemins.

Cela se manifeste par des moyens inattendus et inutiles pour un utilisateur de SGBDR. Par exemple, lorsque vous essayez d’émuler des opérations de chemin (amis d’amis, par exemple) en vous connectant de manière récursive à une firebase database relationnelle, la latence des requêtes augmente de manière imprévisible et continue, sans parler de la torture du langage SQL. Plus de données signifie plus de ralentissement dans une firebase database basée sur des ensembles, même si vous pouvez retarder le problème grâce à une indexation judicieuse.

Comme Dan1111 l’a laissé entendre, la plupart des bases de données de graphes ne souffrent pas de ce type de douleur, car elles expriment des relations à un niveau fondamental. Autrement dit, les relations existent physiquement sur le disque et elles sont nommées, dirigées et peuvent elles-mêmes être décorées avec des propriétés (cela s’appelle le modèle de graphe de propriétés, voir: https://github.com/tinkerpop/blueprints/wiki/Property-Graph -Modèle ). Cela signifie que si vous le souhaitez, vous pouvez regarder les relations sur le disque et voir comment elles “se joignent” aux entités. Les relations sont donc des entités de première classe dans une firebase database de graphes et sont sémantiquement beaucoup plus solides que les relations implicites réifiées lors de l’exécution dans un magasin relationnel.

Alors, pourquoi devriez-vous vous en soucier? Pour deux raisons:

  1. Les bases de données graphiques sont beaucoup plus rapides que les bases de données relationnelles pour les données connectées – une force du modèle sous-jacent. Une conséquence de ceci est que la latence des requêtes dans une firebase database de graphes est proportionnelle à la quantité de graphe que vous choisissez d’explorer dans une requête et n’est pas proportionnelle à la quantité de données stockées, désamorçant ainsi la bombe jointe .
  2. Les bases de données graphiques rendent la modélisation et l’interrogation beaucoup plus agréables, ce qui signifie un développement plus rapide et moins de moments WTF. Par exemple, l’expression ami-ami pour un réseau social typique dans le langage d’interrogation Cyper de Neo4j est juste MATCH (me)-[:FRIEND]->()-[:FRIEND]->(foaf) RETURN foaf .

Dan1111 a déjà donné une réponse marquée comme correcte. Quelques points supplémentaires sont à noter en passant.

Premièrement, dans presque toutes les implémentations de bases de données de graphes, les enregistrements sont “épinglés” car il existe un nombre inconnu de pointeurs pointant vers l’enregistrement à son emplacement actuel. Cela signifie qu’un enregistrement ne peut pas être mélangé à un nouvel emplacement sans laisser une adresse de transfert à l’ancien emplacement ou interrompre un nombre inconnu de pointeurs.

Théoriquement, on pourrait mélanger tous les enregistrements à la fois et trouver un moyen de localiser et de réparer tous les indicateurs. En pratique, il s’agit d’une opération qui peut prendre des semaines sur une firebase database de graphiques volumineuse, pendant laquelle la firebase database doit être désactivée. C’est tout simplement impossible.

En revanche, dans une firebase database relationnelle, les enregistrements peuvent être redissortingbués à une assez grande échelle, et la seule chose à faire est de reconstruire les index qui ont été affectés. Ceci est une opération assez importante, mais nulle part aussi grande que l’équivalent d’une firebase database de graphes.

Le deuxième point à noter en passant est que le World Wide Web peut être considéré comme une firebase database graphique gigantesque. Les pages Web contiennent des liens hypertextes et des liens hypertextes, entre autres, vers d’autres pages Web. La référence est via les URL, qui fonctionnent comme des pointeurs.

Lorsqu’une page Web est déplacée vers une URL différente sans laisser d’adresse de transfert sur l’ancienne URL, un nombre inconnu de liens hypertexte sera brisé. Ces liens rompus donnent alors lieu au redoutable message “Erreur 404: page introuvable” qui interrompt le plaisir de tant de surfeurs.

Avec une firebase database relationnelle, nous pouvons modéliser et interroger un graphique en utilisant des clés étrangères et des auto-jointures. Le simple fait que les SGBDR contiennent le mot relationnel ne signifie pas qu’ils sont efficaces pour gérer les relations. Le mot relationnel dans le SGBDR provient de l’algèbre relationnelle et non de la relation. Dans un SGBDR, la relation elle-même n’existe pas en tant qu’object à part entière. Il doit soit être représenté explicitement en tant que clé étrangère, soit implicitement en tant que valeur dans une table de liens (lors de l’utilisation d’une approche de modélisation générique / universelle). Les liens entre les ensembles de données sont stockés dans les données elles-mêmes.

Plus nous augmentons la profondeur de recherche dans une firebase database relationnelle, plus nous avons besoin d’auto-jointures et plus nos performances de requêtes s’en ressentent. Plus nous allons dans notre hiérarchie, plus nous avons besoin de tables et plus notre requête est lente. Mathématiquement, le coût augmente de manière exponentielle dans une firebase database relationnelle. En d’autres termes, plus nos requêtes et nos relations sont complexes, plus nous bénéficions d’un graphique plutôt que d’une firebase database relationnelle. Nous ne rencontrons pas de problèmes de performance dans une firebase database graphique lors de la navigation dans le graphique. En effet, une firebase database de graphes stocke les relations sous forme d’objects distincts. Cependant, les performances de lecture supérieures entraînent des écritures plus lentes.

Dans certaines situations, il est plus facile de modifier le modèle de données dans une firebase database graphique que dans un SGBDR, par exemple dans un SGBDR si je modifie une relation de table de 1: n à m: n

D’autre part, le SGBDR présente des avantages dans d’autres domaines, par exemple en agrégeant des données ou en effectuant un contrôle de version horodaté sur les données.

Je discute de certains avantages et inconvénients dans mon article sur les bases de données de graphes pour l’entreposage de données.