Pregunta

¿Cuál es la diferencia entre las bases de datos basado en el gráfico ( http://neo4j.org/ ) y orientado a objetos bases de datos ( http://www.db4o.com/ )?

¿Fue útil?

Solución

Me contesto esto de manera diferente: objeto y el gráfico bases de datos operan en dos niveles diferentes de abstracción

.

principales elementos de datos de una base de datos de objetos son objetos, la forma en que las conozco desde un lenguaje de programación orientado a objetos.

principales elementos de datos de una base de datos gráfica son los nodos y los bordes.

Una base de datos objeto no tiene el concepto de un borde (bidireccional) entre dos cosas con integridad referencial automática etc. Una base de datos gráfica no tiene la noción de un puntero que puede ser nulo. (Por supuesto, uno puede imaginar híbridos.)

En términos de esquema, el esquema de una base de datos de objetos es lo que el conjunto de clases está en la aplicación. el esquema de una base de datos gráfica (ya sea implícita, por convención de lo que significan las etiquetas de Cuerda, o explícita, mediante declaración como modelos como lo hacemos en InfoGrid por ejemplo) es independiente de la aplicación. Esto hace que sea mucho más sencillo, por ejemplo, para escribir varias aplicaciones contra los mismos datos utilizando una base de datos gráfica en lugar de una base de datos de objetos, debido a que el esquema es independiente de la aplicación. Por otro lado, el uso de una base de datos de gráfico que no puede simplemente tomar un objeto arbitrario y persistir a él.

Las diferentes herramientas para diferentes trabajos que pensarían.

Otros consejos

Sí, el API parece que la principal diferencia, pero no es realmente un ser superficial. Conceptualmente un conjunto de objetos formará un gráfico y se podría pensar en una API que trata este gráfico de una manera uniforme. Por el contrario, se podría en teoría mía una estructura gráfico genérico para los patrones y asignarlos a los objetos expuestos a través de algún API. Pero el diseño de la API de un producto real tendrá generalmente consecuencia de cómo se almacenan los datos de hecho, la forma en que se puede consultar, por lo que sería lejos de ser trivial a, por ejemplo, crear un contenedor y hacer que parezca otra cosa. Además, una base de datos orientada a objetos debe ofrecer algunas garantías de integridad y una estructura de datos que una base de datos gráfica que normalmente no hacer. De hecho, la base de datos OO graves están lejos de "forma libre":)

Tome un vistazo a [HyperGraphDB] [1] - que es a la vez una base de datos completa orientada a objetos (como db4o) y una base de datos gráfica muy avanzada tanto en términos de capacidades de representación y consulta. Es capaz de almacenar hypergraphs generalizadas (donde los bordes pueden apuntar a más de un nodo y también para otros bordes, así), tiene un sistema de tipo totalmente extensible incrustado como un gráfico etc.

A diferencia de otras bases de datos del gráfico, en HyperGraphDB cada objeto se convierte en un nodo o un borde en el gráfico, con ninguno-a-una mínima intrusión API y usted tiene la opción de representar los objetos en forma de gráfico o tratándolos de una manera que es ortogonal a la estructura gráfico (como valores "carga útil" de sus nodos o bordes). Puede hacer recorridos sofisticados, indización personalizado y de consulta.

Una explicación de por qué HyperGraphDB es de hecho un ODMS, consulte la entrada de blog es una base de datos HyperGraphDB OO? en la web de Kobrix.

Como Will descibes desde otro ángulo, una graphdb mantendrá sus datos separados de clases de la aplicación y objetos. Un graphdb también tiene más funcionalidad integrada para hacer frente a los gráficos, obviamente, -. Como camino más corto o recorridos profundos

Otra diferencia importante es que en un graphdb como Neo4j se puede recorrer el gráfico basado en los tipos y las direcciones de relación (EDGE) sin cargar los nodos completos (incluyendo propiedades del nodo / atributos). También existe la opción de usar Neo4j como back-end de un db objeto, dejar de ser capaz de utilizar todo el material grafía, véase: jo4neo Este proyecto tiene un enfoque diferente, que también podría contar como un db objeto en la parte superior de Neo4j: Neo4j .rb. Una nueva opción es usar primavera Gráfico de datos , lo que da graphdb apoyo a través de anotaciones.

La misma pregunta se hizo en los comentarios a esta entrada de blog .

A partir de echar un vistazo rápido de ambos sus sitios web:

La principal diferencia es la forma en que se estructuran las API, en lugar de la clase de base de datos de forma libre se pueden construir con ellos.

db4o utiliza un mapeo objeto - se crea una clase Java # / C, y se utiliza la reflexión para persistir en la base de datos

.

Neo4j tiene una API manipulación explícita.

Neo4j pareció, en mi humilde opinión, mucho más agradable para interactuar con ellos.

También puede considerar un almacén de claves-valor -. Usted podría hacer exactamente la misma base de datos de forma libre con uno de los

La diferencia en el nivel bajo no es tan grande. Tanto gestionar las relaciones como enlaces directos sin juntas costoso. Además ambos tienen una forma de atravesar las relaciones con el lenguaje de consulta, pero la base de datos gráfica tiene que ir de forma recursiva los operadores a nivel enésimo.

Sin embargo, la mayor diferencia se encuentra en el dominio: en unas bases de datos de representar todo se basa en los 2 tipos:. Vértices y aristas, aunque por lo general se pueden definir sus propios tipos como una especie de subtipos de vértice o borde

En el ODBMS usted no tiene conceptos vértice y Edge, a menos que usted escribe su propia cuenta.

Con las bases de datos del gráfico, que tiene un ligero parecido a la posibilidad de que se basa en la teoría de grafos matemática. Con bases de datos orientadas a objetos, tiene la certeza de que se basa en nada en absoluto (y ciertamente ninguna teoría matemática en absoluto).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top