¿Cuál es la diferencia entre las bases de datos basadas en gráficos y las bases de datos orientadas a objetos?


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

Author: Andrey Agibalov, 2010-02-07

6 answers

Respondería a esto de manera diferente: las bases de datos de objetos y gráficos operan en dos niveles diferentes de abstracción.

Los principales elementos de datos de una base de datos de objetos son objetos, tal como los conocemos de un lenguaje de programación orientado a objetos.

Los principales elementos de datos de una base de datos de gráficos son nodos y bordes.

Una base de datos de objetos no tiene la noción de un borde (bidireccional) entre dos cosas con integridad referencial automática, etc. Una base de datos de gráficos 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 cualquiera que sea el conjunto de clases en la aplicación. El esquema de una base de datos de gráficos (ya sea implícito, por convención de lo que significan las etiquetas de cadena, o explícito, por 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, escribir varias aplicaciones contra los mismos datos utilizando un gráfico base de datos en lugar de una base de datos de objetos, porque el esquema es independiente de la aplicación. Por otro lado, usando una base de datos de gráficos no puedes simplemente tomar un objeto arbitrario y persistirlo.

Diferentes herramientas para diferentes trabajos, creo.

 35
Author: Johannes Ernst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-10 00:50:13

Sí, la API parece la diferencia principal, pero no es realmente 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, en teoría podría minar una estructura de grafos genéricos para patrones y mapearlos a objetos expuestos a través de alguna API. Pero el diseño de la API de un producto real generalmente tendrá consecuencias en cómo se almacenan realmente los datos, cómo se pueden consultar, por lo que estaría lejos de ser trivial para, por ejemplo, crear un envoltorio 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 escritura que una base de datos de gráficos normalmente no hará. De hecho, la base de datos seria de OO está lejos de ser "forma libre":)

Eche un vistazo a [HyperGraphDB] [1]: es una base de datos orientada a objetos completa (como db4o) y una base de datos de gráficos muy avanzada, tanto en términos de capacidades de representación como de consulta. Es capaz de almacenar generalizada hypergraphs (donde los bordes pueden apuntar a más de un nodo y también a otros bordes), tiene un sistema de tipos completamente extensible incrustado como un gráfico, etc.

A diferencia de otras bases de datos de gráficos, en HyperGraphDB cada objeto se convierte en un nodo o un borde en el gráfico, con una intrusión API de ninguna a mínima y usted tiene la opción de representar sus objetos como un gráfico o tratarlos de una manera que sea ortogonal a la estructura del gráfico (como valores de "carga útil" de sus nodos o bordes). Usted puede hacer traversals sofisticados, indexación personalizada y consultas.

Una explicación de por qué HyperGraphDB es de hecho un ODMS, ver la entrada del blog ¿Es HyperGraphDB una base de datos OO? en el sitio web de Kobrix.

 15
Author: Boris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-21 03:27:13

Al igual que descibes desde otro ángulo, un graphdb mantendrá sus datos separados de sus clases y objetos de aplicación. Un graphdb también tiene más funcionalidad incorporada para lidiar con gráficos, obviamente, como el camino más corto o los traversals profundos.

Otra diferencia importante es que en un graphdb como neo4j puede recorrer el gráfico en función de los tipos de relación (arista) y las direcciones sin cargar los nodos completos (incluidas las propiedades/atributos del nodo). También existe la opción de usar neo4j como backend de una db de objeto, aún siendo capaz de usar todo el material gráfico, ver: jo4neo Este proyecto tiene un enfoque diferente que también podría contar como una db de objeto sobre neo4j: neo4j.rb . Una nueva opción es usar Spring Data Graph, que da soporte a graphdb a través de anotaciones.

La misma pregunta se hizo en los comentarios a este blogpost.

 7
Author: nawroth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-21 13:17:26

De una navegación rápida de sus dos sitios web:

La principal diferencia es la forma en que las API están estructuradas, en lugar del tipo de base de datos de forma libre que se puede construir con ellas.

Db4o utiliza una asignación de objetos - se crea una clase Java/C#, y utiliza la reflexión para persistirla en la base de datos.

Neo4j tiene una API de manipulación explícita.

Neo4j parecía, en mi humilde opinión, mucho más agradable para interactuar con.

También podría considerar un almacén de clave-valor-usted podría hacer exactamente la misma base de datos de forma libre con uno de esos.

 1
Author: Will,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-07 20:43:35

La diferencia a bajo nivel no es tan grande. Ambos gestionan las relaciones como enlaces directos sin costosas uniones. Además, ambos tienen una forma de atravesar las relaciones con el lenguaje de consulta, pero la base de datos de gráficos tiene operadores para ir recursivamente en el Enésimo nivel.

Pero la mayor diferencia está en el dominio: en una base de datos de grafos todo se basa en los 2 tipos: vértices y aristas, incluso si generalmente puede definir sus propios tipos como una especie de subtipos de Vértice o Arista.

En el ODBMS no tiene conceptos de Vértice y Borde, a menos que escriba el suyo propio.

 1
Author: Lvca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-12 20:47:55

Con las bases de datos de grafos, tiene una ligera apariencia de una posibilidad de que se base en la teoría matemática de grafos. Con las bases de datos orientadas a objetos, usted tiene la certeza de que no se basa en nada en absoluto (y sin duda ninguna teoría matemática en absoluto).

 -2
Author: Erwin Smout,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-08 21:16:23