Pergunta

O que é a diferença entre as bases de dados à base de gráfico ( http://neo4j.org/ ) e objeto-orientada bancos de dados ( http://www.db4o.com/ )?

Foi útil?

Solução

Eu responder a esta forma diferente:. Banco de dados orientado a objetos e gráfico operar em dois diferentes níveis de abstração

principais elementos de dados do

Um banco de dados objeto são objetos, a nossa forma de conhecê-los a partir de uma linguagem de programação orientada a objetos.

principais elementos de dados da base de dados de um gráfico são nós e arestas.

Um banco de dados objeto não tem a noção de uma borda (bidirecional) entre duas coisas com integridade referencial automática etc. Um banco de dados do gráfico não tem a noção de um ponteiro que pode ser nulo. (É claro que se pode imaginar híbridos.)

Em termos de esquema, o esquema de um banco de dados objeto é o que o conjunto de classes está na aplicação. esquema de um banco de dados gráfico (seja implícita, por convenção do que Cordas etiquetas média, ou explícita, através de uma declaração como modelos como o fazemos em InfoGrid por exemplo) é independente da aplicação. Isso torna muito mais simples, por exemplo, para escrever múltiplas aplicações contra os mesmos dados usando um banco de dados do gráfico em vez de um banco de dados objeto, porque o esquema é independente da aplicação. Por outro lado, usando um banco de dados gráfico que você não pode simplesmente tomar um objeto arbitrário e persistem-lo.

ferramentas diferentes para diferentes trabalhos que eu poderia pensar.

Outras dicas

Sim, a API parece ser a grande diferença, mas não é realmente um superficial. Conceitualmente um conjunto de objetos formarão um gráfico e você poderia pensar em uma API que trata este gráfico de uma maneira uniforme. Por outro lado, você poderia, em teoria mina de uma estrutura gráfico genérico para padrões e mapeá-los para objetos expostos através de algum API. Mas o design da API de um produto real geralmente terá consequências sobre a forma como os dados são realmente armazenados, como pode ser consultada, por isso estaria longe de ser trivial, digamos, criar um wrapper e fazer parecer que outra coisa. Além disso, um banco de dados orientado a objetos devem oferecer algumas garantias de integridade e uma estrutura de digitação que um banco de dados gráfico normalmente não irá fazer. Na verdade, banco de dados OO graves estão longe de "forma livre":)

Dê uma olhada em [HyperGraphDB] [1] - é tanto um banco de dados completo orientada a objetos (como db4o) e um banco de dados gráfico muito avançado tanto em termos de capacidades de representação e consulta. Ele é capaz de armazenar Hipergrafos generalizadas (onde arestas pode apontar para mais do que um nó e também para outras arestas bem), que tem um sistema de tipo totalmente extensível incorporado como um gráfico etc.

Ao contrário de outros bancos de dados de grafos, em HyperGraphDB cada objeto torna-se um nó ou uma vantagem no gráfico, com nenhum-se o mínimo de intrusão API e você tem a opção de representar seus objetos como um gráfico ou tratá-los de uma forma que é ortogonal à estrutura de gráfico (como valores de "carga" de seus nodos ou bordas). Você pode fazer travessias sofisticados, indexação personalizado e consulta.

Uma explicação porque HyperGraphDB é na verdade um ODMS, veja o post HyperGraphDB É um OO banco de dados? no site da Kobrix.

Como Will descibes de outro ângulo, um graphdb irá manter seus dados separados de suas classes de aplicação e objetos. A graphdb também tem mais funcionalidade interna para lidar com gráficos, obviamente -. Como caminho mais curto ou traversals profundas

Outra diferença importante é que em um graphdb como Neo4j pode atravessar o gráfico baseado no relacionamento (borda) tipos e indicações sem carregar os nós completos (incluindo propriedades de nó / atributos). Há também a opção de usar Neo4j como backend de um db objeto, ainda ser capaz de usar todas as coisas graphy, consulte: jo4neo Este projeto tem uma abordagem diferente, que também poderia contar como um db objeto em cima do Neo4j: Neo4j .rb . Uma nova opção é usar Primavera Graph Dados , que dá suporte graphdb através de anotações.

A mesma pergunta foi feita nos comentários para este blogpost .

De uma olhada rápida de ambos os seus sites:

A principal diferença é a forma como as APIs são estruturados, ao invés do tipo de banco de dados de forma livre você pode construir com eles.

db4o usa um mapeamento objeto -. Você cria uma classe Java / C #, e usa reflexão para persistir lo no banco de dados

Neo4j tem uma API manipulação explícita.

Neo4j parecia, na minha humilde opinião, muito mais agradável para interagir com.

Você também pode considerar um armazenamento de chave-valor -. Você poderia fazer exatamente o mesmo banco de dados de forma livre com um desses

A diferença no baixo nível não é tão grande. Ambos gerenciar relacionamentos como ligações directas sem caro junta. Além disso tem tanto uma maneira de atravessar as relações com a linguagem de consulta, mas o banco de dados gráfico tem operadores para ir de forma recursiva a nível Nth.

Mas a maior diferença está no domínio: em um Gráfico de bancos de dados todo baseia-se nos 2 tipos:. Vértices e arestas, mesmo que normalmente você pode definir seus próprios tipos de como uma espécie de subtipos de Vertex ou Borda

Nos ODBMS você não tem conceitos Vertex e EDGE, a menos que você escrever o seu próprio.

Com bases de dados de gráficos, você tem uma ligeira semelhança de uma chance de que ele é baseado na teoria gráfico matemático. Com bancos de dados orientados a objetos, você tem a certeza de que ele é baseado em nada (e certamente teoria não matemática em tudo).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top