2012-02-08 15 views
13

He estado utilizando RDBMS desde la universidad y soy realmente luchando contra con los conceptos subyacentes de bases de datos NoSQL ... pero creo que su concepto es realmente genial.Neo4j y ORM (Hibernate)

Yo creo entiendo lo siguiente (por favor, corríjanme si me equivoco, ya que estos juegan en mi pregunta aquí!):

  • NoSQL no es una especificación formal; es un concepto que subyace a una nueva "raza" de las bases de datos que no son relacionales y no utilizan SQL
  • Como tal, cada sistema NoSQL es diferente (por ejemplo, MongoDB es JSON-céntrico)

Si éstos son ciertas, entonces permítannos redirigir nuestra atención a Neo4j, una base de datos "basada en gráficos".

Después de leer detenidamente el sitio y el PDF, parece que Neo4j no es solo una base de datos, sino que también proporciona una API Java que esencialmente reemplaza la necesidad de herramientas ORM tradicionales como Hibernate.

lo tanto, mi pregunta final es en realidad una solicitud de aclaración/confirmación de esta última afirmación, en concreto:

  • ¿Es cierto que si mi backend es completamente basado en Neo4j, que yo no tendría ninguna necesidad de Hibernate (¿cuál es mi ORM habitual)? ¿Son estas dos API mutuamente excluyentes, o hay alguna forma de beneficiarse entre el uso de ambas?

¡Gracias de antemano!

+0

Corrección pequeña que no se abordó en ninguna respuesta: NoSQL no implica que la base de datos no sea relacional. La mayoría de las bases de datos de gráficos se consideran NoSQL y, sin embargo, las relaciones son un concepto fundamental en las bases de datos de gráficos. –

Respuesta

5

AFAIK, Hibernate es un marco de mapeo relacional/objeto que solo es compatible con bases de datos similares a SQL. Entonces no necesitarás/podré usarlo si usas Neo4j, usarías la API de Neo4j.

Pero nada le impide utilizar tanto Neo4j como una base de datos SQL, por lo tanto, mezcla Hibernate y la API neo4j (lo más probable es que almacene/consulte diferentes objetos dentro de su proyecto).

¿Ha comprobado los ejemplos básicos que figuran en el sitio web de Neo4j, como http://docs.neo4j.org/chunked/snapshot/tutorials-java-embedded-hello-world.html?

EDIT:

Tiene usted razón, NoSQL no define un estándar específico. Es posible que desee echarle un vistazo a esta introducción (breve): http://martinfowler.com/articles/nosql-intro.pdf

+4

Hibernate OGM puede usar una base de datos NoSQL. – shaILU

+1

a la derecha, y ahora específicamente también es compatible con Neo4J: http://in.relation.to/Bloggers/HibernateOGM400Beta4IsOut#H-InitialEmbeddedNeo4jIntegration (Aunque todavía es experimental) – Sanne

2

Como @assylias dijo que no podría usar Hibernate como ORM para una BD gráfica como Neo4J, pero hay otras soluciones.

En primer lugar, puede utilizar la API Neo4J para recorrer el gráfico y recuperar vértices y bordes, considere que no es un ORM, por lo que no correlacionará los vértices y/o bordes que recupera con entidades personalizadas como Hibernate .

Esto puede ser una solución, pero terminaría con un código escrito específicamente para Neo4J que tiene su propia API, diferente de otras bases de datos de gráficos (como OrientDB, por ejemplo) y continúa con el desarrollo que probablemente necesite una una forma más flexible de recuperar datos y asignar los resultados a sus objetos, por lo que sugiero echar un vistazo a la pila Tinkerpop (http://tinkerpop.com/) que es básicamente una serie de apis de Java y capas de abstracción para trabajar con bases de datos de gráficos.

Comience a mirar Blueprint (http://blueprints.tinkerpop.com) que es una capa de abstracción sobre los conceptos principales de una base de datos gráfica, por lo que puede escribir código que no depende de un proveedor de base de datos específico, luego tome un vistazo a Frames (http://frames.tinkerpop.com/) un ORM como marco para mapear objetos a vértices y bordes, y Gremlin (http://gremlin.tinkerpop.com/) un lenguaje para consultar fácilmente el gráfico.

+1

+1 para planos y marcos. Frames es probablemente el cierre de hibernación como ORM que encontrarás. Sin embargo, como todos los ORM, recibirás un golpe cuando se trata de rendimiento con marcos. – Pridkett

8

He estado usando RDBMSes desde la universidad y estoy realmente luchando con los conceptos subyacentes de las bases de datos NoSQL ... pero creo que el concepto es muy bueno.

Una base de datos gráfico como Neo4j expresa un dominio en términos de vértices conectados a otros vértices con bordes. Un borde contiene su vértice de inicio y final. Cada vértice y borde pueden tener un mapa de propiedades, pares clave-valor que se pueden usar para almacenar información adicional sobre los vértices y bordes. Por supuesto, puede ampliar esto con su propio dominio, pero las cosas son simples para comenzar.

Para ver estos conceptos en acción, recomiendo el Getting Started Guide for Gremlin. GREMLIN es un lenguaje específico de dominio para atravesar gráficos que funciona con Neo4j y varias otras bases de datos de gráficos. GREMLIN es para una base de datos de gráficos lo que SQL es para una base de datos relacional.

No puedo recomendarle lo suficiente a Gremlin mientras aprende sobre gráficos. En solo unos minutos, puede comenzar a trabajar a través de los tutoriales de Gremlin. GREMLIN le proporcionará un REPL que le permitirá experimentar con pequeños gráficos y obtener comentarios inmediatos. Incluso si no usa Gremlin en su sistema de producción, el conocimiento adquirido en REPL lo ayudará a validar sus diseños y puede servir como precursor de pruebas y desarrollo de unidades más rigurosas.

Si prefiere trabajar directamente con las API de Neo4j, su traversal framework tutorial debería ayudar.

¿Es cierto que si se basa por completo mi Neo4j-back-end, que yo no tendría ninguna necesidad de Hibernate (que es mi costumbre ORM)?

Puesto que usted es nuevo en Neo4j, yo recomendaría que evite ORM hasta que primero entender lo que el ORM necesita hacer para usted. Vea cuánto dolor realmente va a experimentar mapeando los resultados de su consulta a su dominio. Si el dolor puede mejorarse con un ORM, el marco Spring-Data mencionado por Peter puede ser útil.

Con toda probabilidad, probablemente te encuentres bien. He trabajado en varios proyectos donde la complejidad accidental introducida por el ORM superaba con creces los beneficios. Asignar los resultados de la consulta al dominio no era de ninguna manera la parte más complicada del sistema.

2

partir de la versión 4 beta, Hibernate OGM ha añadido soporte para Neo4j:

Hibernate OGM ahora pueden trabajar con Neo4j, una base de datos gráfica propiedad totalmente transaccional.

Las bases de datos de gráficos representan los datos como un sistema de nodos interconectados y funcionan muy bien cuando necesita almacenar información como la relación entre personas en las redes sociales, por ejemplo. En Además, en un gráfico de propiedades, también puede agregar propiedades a los elementos del gráfico.

Hibernate OGM mapea una entidad como un nodo donde los atributos de la entidad se convierten en propiedades del nodo. Por el momento, agregamos algunas propiedades adicionales para la conversión del nodo en la entidad , pero estamos planeando reemplazarlas mediante el mecanismo de etiqueta agregado en , las últimas versiones de Neo4j.

La relación entre dos nodos representa una asociación entre dos entidades. Actualmente, una asociación bidireccional requiere dos relaciones pero vamos a cambiar esto ya que Neo4j puede navegar una relación en ambas direcciones.

La integración con Neo4j es experimental, pero estamos planeando en mejorando pronto. Por favor, háganos saber lo que piensa o ayúdenos mejorándolo.

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

Es todavía muy temprano días y el apoyo inicial es probable que mejore con el tiempo. Estoy en proceso de intentar configurarlo y probarlo. Soy consciente de que también hay un Spring project que tiene una mejor integración.

0

¿Ha considerado usar Ferma? Es un ORM específico de las bases de datos gráficas. Es compatible con todas las principales marcas, incluyendo Neo4J. Aquí hay una descripción del proyecto.

Ferma es un marco robusto que asume un rol similar al de una biblioteca de modelo relacional de objetos (ORM) para bases de datos tradicionales. Ferma a menudo se conoce como una biblioteca Object-graph Model (OGM), y asigna objetos de Java a elementos en un gráfico como un Vertex o un borde. En corto, permite definir un esquema utilizando interfaces Java y las clases , que proporciona un nivel de abstracción para interactuar con el gráfico subyacente .