Quelle est la différence entre les bases de données graphiques ( http://neo4j.org/ ) et orientées objet ( http://www.db4o.com/ )?
Réponses
Trop de publicités?Je répondrais de façon différente: objet graphique et les bases de données fonctionnent sur deux différents niveaux d'abstraction.
Un objet de la base de données des principaux éléments de données sont des objets, la façon dont nous savons à partir d'un langage de programmation orienté objet.
Un graphique de la base de données des principaux éléments de données sont des nœuds et des arêtes.
Un objet de la base de données n'a pas la notion de (bidirectionnel) de la limite entre deux choses automatique de l'intégrité référentielle etc. Un graphique de la base de données n'a pas la notion de pointeur qui peut être NULL. (Bien sûr, on peut imaginer des hybrides.)
En termes de schéma, un objet de la base de données du schéma est ce que l'ensemble des classes est dans l'application. Un graphique de la base de données du schéma (que ce soit implicitement, par la convention de la Chaîne d'étiquettes moyenne, ou explicite, par une déclaration comme des modèles comme nous le faisons dans InfoGrid par exemple) est indépendant de l'application. Cela rend beaucoup plus facile, par exemple, pour écrire des applications multiples sur les mêmes données à l'aide d'un graphique de la base de données au lieu d'un objet de base de données, parce que le schéma est indépendante des applications. D'autre part, à l'aide d'un graphique de la base de données, vous ne pouvez pas simplement prendre un objet arbitraire et persister.
Les différents outils pour les différents travaux que je pense.
Oui, l'API semble que la principale différence, mais n'est pas vraiment superficielle. Sur le plan conceptuel, un ensemble d'objets forme un graphique et vous pourriez penser à une API qui traite de ce graphe de manière uniforme. À l'inverse, vous pourriez en théorie de la mine générique graphique de la structure des modèles et à la carte aux objets exposés via des API. Mais la conception de l'API d'un produit réel, ont généralement des conséquences sur la façon dont les données sont enregistrées, comment il peut être consulté, de sorte qu'il serait loin d'être négligeable, par exemple, créer un wrapper et la faire ressembler à quelque chose d'autre. Aussi, une orientée objet base de données doit offrir quelque garantie d'intégrité et de taper structure d'un graphe de la base de données ne sera pas l'habitude de faire. En effet, de graves OO base de données sont loin d'être "forme libre" :)
Jetez un oeil à [HyperGraphDB][1] - il est à la fois une complète orientée objet base de données (comme db4o) et un très avancée graphique de la base de données à la fois en termes de représentation et de capacités d'interrogation. Il est capable de stocker généralisée hypergraphs (où des bords point de plus d'un nœud et aussi à d'autres bords ainsi), il est entièrement extensible type de système embarqué sous forme de graphique, etc.
Contrairement à d'autres graphe des bases de données, HyperGraphDB chaque objet devient un noeud ou un arc dans le graphe, avec aucun-à-minimal API intrusion et vous avez le choix de la représentation de vos objets sous forme de graphique ou de les traiter d'une manière qui est orthogonale à la structure graphique (en tant que "charge", les valeurs des nœuds ou les bords). Vous pouvez faire sophistiqué traversals personnalisé, d'indexation et d'interrogation.
Une explication de pourquoi HyperGraphDB est en fait un système de gestion de dictée, voir le post de blog Est HyperGraphDB une Base de données OO? au Kobrix du site web.
Comme décrivent à partir d'un autre angle, un graphdb gardera vos données séparées à partir de votre application de classes et d'objets. Un graphdb a également plus d'une fonctionnalité intégrée pour traiter avec des graphiques, évidemment - comme le chemin le plus court ou profonde traversals.
Une autre différence importante est que, dans un graphdb comme neo4j vous pouvez parcourir le graphique basée sur la relation (edge) les types et les directions sans charger la totalité de nœuds (y compris le nœud propriétés/attributs). Il y a aussi le choix de l'utilisation de neo4j comme support d'un objet db, tout en étant capable d'utiliser toute la graphie des trucs, voir: jo4neo Ce projet propose une approche différente, qui pourrait aussi être considéré comme un objet de db sur le dessus de neo4j: neo4j.rb. Une nouvelle option est d'utiliser le Printemps Graphique de Données, ce qui donne graphdb soutien par le biais d'annotations.
La même question a été posée dans les commentaires de ce billet de blog.
À partir d'une navigation rapide à la fois de leurs sites web:
La différence majeure est le moyen de l'Api sont structurés, plutôt que le genre de la forme libre de la base de données, vous pouvez construire avec eux.
db4o utilise un objet de cartographie - vous créer un Java/C# de la classe, et il utilise la réflexion pour persister dans la base de données.
neo4j est une manipulation explicite de l'API.
Neo4j semble, à mon humble avis, beaucoup plus agréable d'interagir avec.
Vous pouvez également envisager une clé-valeur en magasin, vous pourriez faire exactement la même forme libre de la base de données avec l'un de ceux-ci.
La différence de bas niveau n'est pas si énorme. À la fois gérer les relations que les liens directs sans coûteuse rejoint. En outre, les deux ont une façon de traverser les relations avec le langage de Requête, mais le graphique de la base de données a des opérateurs à aller de façon récursive à n-ième niveau.
Mais la plus grande différence est dans le domaine: dans un Graphique de bases de données tout est basé sur la 2 types: les sommets et les arêtes, même si habituellement, vous pouvez définir vos propres types comme une sorte de sous-types d'un Sommet ou une Arête.
Dans le ODBMS vous n'avez pas le Sommet et le Bord des concepts, sauf si vous écrivez votre propre.