Neo4j et ORM (Hibernate)

J’utilise les SGBDR depuis l’université et je me bats vraiment avec les concepts sous-jacents des bases de données NoSQL … mais je pense que leur concept est vraiment cool.

Je crois comprendre ce qui suit (corrigez-moi si je me trompe, corrigez-moi, car cela fait partie de ma question ici!):

  • NoSQL n’est pas une spécification formelle; c’est un concept qui sous-tend une nouvelle “race” de bases de données qui ne sont pas relationnelles et n’utilisent pas SQL
  • En tant que tel, chaque système NoSQL est différent (par exemple, MongoDB est centré sur JSON)

Si cela est vrai, redirigeons notre attention vers Neo4j, une firebase database “basée sur des graphes”.

Après avoir parcouru le site et le PDF, il semble que Neo4j ne soit pas seulement une firebase database, il fournit également une API Java qui remplace essentiellement le besoin d’outils ORM traditionnels tels que Hibernate.

Donc, ma dernière question est en fait une demande de clarification / confirmation de cette dernière affirmation, plus précisément:

  • Est-il vrai que si mon back-end est entièrement basé sur Neo4j, je n’aurais pas besoin d’Hibernate (qui est mon ORM habituel)? Ces deux API s’excluent-elles mutuellement ou existe-t-il un moyen de tirer profit de l’utilisation des deux?

Merci d’avance!

AFAIK, Hibernate est un framework de mapping object / relationnel qui ne supporte que les bases de données de type SQL. Donc, vous n’aurez pas besoin / ne pourrez pas l’utiliser si vous utilisez Neo4j, vous utiliseriez plutôt l’API de Neo4j.

Mais rien ne vous empêche d’utiliser à la fois Neo4j et une firebase database SQL, donc mélangez Hibernate et l’API neo4j (le plus susceptible de stocker / interroger différents objects au sein de votre projet).

Avez-vous vérifié les exemples de base donnés sur le site Web Neo4j, tels que http://docs.neo4j.org/chunked/snapshot/tutorials-java-embedded-hello-world.html ?

MODIFIER:

Vous avez raison, NoSql ne définit pas de norme spécifique. Vous voudrez peut-être jeter un coup d’œil à cette brève introduction: http://martinfowler.com/articles/nosql-intro.pdf

J’utilise les SGBDR depuis l’université et je me bats vraiment avec les concepts sous-jacents des bases de données NoSQL … mais je pense que leur concept est vraiment cool.

Une firebase database de graphes telle que Neo4j exprime un domaine en termes de sumts connectés à d’autres sumts à arêtes. Une arête contient son sumt et son sumt. Chaque sumt et arête peut avoir une carte de propriétés, des paires clé-valeur pouvant être utilisées pour stocker des informations supplémentaires sur les sumts et les arêtes. Vous pouvez, bien sûr, étendre cela à votre propre domaine, mais les choses sont simples pour commencer.

Pour voir ces concepts en action, je vous recommande le Guide de démarrage pour Gremlin . Gremlin est un langage de domaine spécifique pour la traversée de graphes fonctionnant avec Neo4j et plusieurs autres bases de données de graphes. Gremlin est à une firebase database de graphes ce que SQL est à une firebase database relationnelle.

Je ne saurais trop recommander Gremlin pendant que vous étudiez les graphes. En quelques minutes à peine, vous pouvez utiliser les didacticiels Gremlin. Gremlin vous fournira un REPL qui vous permettra d’expérimenter de petits graphiques et d’obtenir un retour immédiat. Même si vous n’utilisez pas Gremlin dans votre système de production, les connaissances acquises grâce au REPL vous aideront à valider vos conceptions et peuvent servir de précurseur à des tests et à un développement plus rigoureux des unités.

Si vous préférez travailler directement avec les API de Neo4j, leur tutoriel sur la structure de parcours devrait vous aider.

Est-il vrai que si mon back-end est entièrement basé sur Neo4j, je n’aurais pas besoin d’Hibernate (qui est mon ORM habituel)?

Puisque vous êtes nouveau dans Neo4j, je vous recommanderais d’éviter les ORM jusqu’à ce que vous compreniez ce que l’ORM doit faire pour vous. Voyez combien de douleur vous allez réellement ressentir en associant les résultats de votre requête à votre domaine. Si la douleur peut être atténuée par un ORM, le cadre Spring-Data mentionné par Peter peut être utile.

Probablement, tout ira bien pour vous. J’ai travaillé sur plusieurs projets dont la complexité accidentelle introduite par l’ORM dépassait de loin les avantages. Le mappage des résultats de la requête sur le domaine n’était en aucun cas la partie la plus compliquée du système.

Au lieu d’Hibernate, je jetterais un coup d’œil à http://www.springsource.org/spring-data/neo4j qui est piloté par les annotations, supporté par Spring et fonctionne très bien. Serait-ce quelque chose à travailler avec?

À partir de la version 4 bêta, Hibernate OGM a pris en charge Neo4j:

Hibernate OGM peut désormais fonctionner avec Neo4j, une firebase database de graphes de propriétés entièrement transactionnelles.

Les bases de données graphiques représentent les données en tant que système de nœuds interconnectés. Cela fonctionne très bien lorsque vous devez stocker des informations telles que la relation entre des personnes dans des réseaux sociaux, par exemple. En outre, dans un graphique de propriétés, vous pouvez également append des propriétés aux éléments du graphique.

Hibernate OGM mappe une entité en tant que nœud où les atsortingbuts de l’entité deviennent des propriétés du nœud. Pour le moment, nous ajoutons quelques propriétés supplémentaires pour la conversion du nœud en entité, mais nous prévoyons de les remplacer à l’aide du mécanisme d’étiquette ajouté dans les dernières versions de Neo4j.

La relation entre deux nœuds représente une association entre deux entités. Actuellement, une association bidirectionnelle nécessite deux relations, mais nous allons changer cela car Neo4j peut naviguer dans une relation dans les deux sens.

L’intégration avec Neo4j est expérimentale, mais nous prévoyons de l’améliorer prochainement. S’il vous plaît, dites-nous ce que vous pensez ou aidez-nous à l’améliorer.

http://planet.jboss.org/post/hibernate_ogm_4_0_0_beta4_is_out

C’est encore très tôt et le support initial devrait s’améliorer avec le temps. Je suis en train d’essayer de le configurer et de l’essayer. Je suis conscient qu’il existe également un projet Spring qui offre une meilleure intégration.

Comme @assylias a déclaré que vous ne pourriez pas utiliser Hibernate en tant qu’ORM pour une firebase database Graph comme Neo4J, mais il existe d’autres solutions.

En premier lieu, vous pouvez utiliser l’API Neo4J pour parcourir le graphique et récupérer des sumts et des arêtes; considérez que ce n’est pas un ORM et qu’il ne mapperait donc pas les sumts et / ou les arêtes que vous extrayez sur vos entités personnalisées, comme le fait Hibernate.

Cela peut être une solution, mais vous obtiendrez un code écrit spécifiquement pour Neo4J, qui possède sa propre API, différente des autres bases de données de graphes (comme OrientDB, par exemple). Pour poursuivre le développement, vous aurez probablement besoin d’une méthode plus souple de gestion. récupérer des données et mapper les résultats sur vos objects, je suggère donc de jeter un coup d’œil à la stack Tinkerpop ( http://tinkerpop.com/ ), qui est essentiellement une série de couches Java Apis et d’abstraction permettant de travailler avec des bases de données graphiques.

Commencez à regarder Blueprint (http://blueprints.tinkerpop.com) qui est une couche d’abstraction recouvrant les concepts principaux d’une firebase database graphique. Vous pouvez ainsi écrire du code qui ne dépend pas d’un fournisseur de firebase database spécifique, puis consulter Cadres. (http://frames.tinkerpop.com/), un cadre semblable à ORM permettant de mapper des objects sur des sumts et des arêtes, et Gremlin (http://gremlin.tinkerpop.com/), un langage permettant d’interroger facilement le graphique.

Avez-vous envisagé d’utiliser Ferma ? C’est un ORM spécifique aux bases de données de graphes. Il supporte toutes les grandes marques, y compris Neo4J. Voici une description du projet.

Ferma est un framework robuste qui joue un rôle similaire à une bibliothèque ORM (Object-Relational Model) pour les bases de données traditionnelles. Ferma est souvent désignée par le terme bibliothèque de modèle object-graphe (OGM) et mappe les objects Java aux éléments d’un graphique, tel qu’un sumt ou un sumt. En bref, cela permet de définir un schéma à l’aide d’interfaces et de classes java, ce qui fournit un niveau d’abstraction permettant d’interagir avec le graphique sous-jacent.