Quais são os casos de uso de bancos de dados baseados em Graph (http://neo4j.org/)? [fechadas]

StackOverflow https://stackoverflow.com/questions/1000162

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu tenho usado relacional DB de um monte e decidiu aventurar-se em outros tipos disponíveis.

Este produto em particular parece ser bom e promissor: http://neo4j.org/

Alguém já usou bancos de dados baseados em grafos? Quais são os prós e contras de uma prespectiva usabilidade?

Você usou isso em um ambiente de produção? Qual foi a exigência de que você será solicitado a usá-los?

Foi útil?

Solução

Eu usei um banco de dados do gráfico em um trabalho anterior. Nós não estávamos usando Neo4j, foi uma coisa in-house construído em cima do Berkeley DB, mas foi similar. Ele foi usado na produção (ainda é).

O motivo foi utilizado um banco de dados gráfico era que os dados armazenados pelo sistema e as operações do sistema estava fazendo com os dados eram exatamente o ponto fraco de bancos de dados relacionais e foram exatamente o ponto forte de bases de dados de gráficos. O sistema necessário para armazenar coleções de objetos que não possuem um esquema fixo e estão ligados entre si por relações. Para raciocinar sobre os dados, o sistema precisava fazer uma série de operações que seria um par de travessias em um banco de dados gráfico, mas isso seria consultas muito complexas em SQL.

As principais vantagens do modelo gráfico foram o tempo de desenvolvimento rápido e flexibilidade. Poderíamos rapidamente adicionar novas funcionalidades, sem afetar as implantações existentes. Se um potencial cliente queria importar alguns de seus próprios dados e enxertar-lo em cima do nosso modelo, isso poderia ser feito normalmente no local, pelo representante de vendas. Flexibilidade também ajudou quando estávamos projetando um novo recurso, poupando-nos de tentar espremer novos dados em um modelo de dados rígida.

Ter um banco de dados estranho vamos construir um monte de nossas outras tecnologias estranhas, dando-nos muitas secreta molho de distinguir o nosso produto dos de nossos concorrentes.

A principal desvantagem foi que não estavam usando a tecnologia de banco de dados relacional padrão, que pode ser um problema quando seus clientes são enterprisey. Nossos clientes se perguntar por que não podia simplesmente hospedar nossos dados sobre seus clusters do Oracle gigantes (os nossos clientes geralmente tinham grandes datacenters). Um dos a equipe realmente reescreveu a camada de banco de dados para usar o Oracle (ou PostgreSQL ou MySQL), mas foi um pouco mais lento do que o original. Pelo menos uma grande empresa ainda tinha uma política da Oracle-somente, mas felizmente a Oracle comprou Berkeley DB. Nós também tivemos que escrever um monte de ferramentas extras -. Nós não poderia simplesmente usar o Crystal Reports por exemplo

A outra desvantagem do nosso banco de dados gráfico foi que nós construímos-lo nós mesmos, o que significava que quando nós batemos um problema (geralmente com escalabilidade) tivemos de resolvê-lo nós mesmos. Se tivéssemos usado um banco de dados relacional, o fornecedor já teria resolvido o problema há dez anos.

Se você está construindo um produto para clientes enterprisey e seus acessos de dados para o modelo relacional, usar um banco de dados relacional, se puder. Se a sua aplicação não se encaixa no modelo relacional mas se encaixa no modelo de gráfico, use um banco de dados gráfico. Se ele só se encaixa algo mais, usar isso.

Se o seu aplicativo não precisa se encaixam na arquitetura blub atual, use um banco de dados gráfico ou CouchDB, ou BigTable, ou o que se adequa ao seu aplicativo e você acha que é legal. Pode dar-lhe uma vantagem, e sua diversão para tentar coisas novas.

O que quer que você escolheu, não tente construir o motor de banco de dados a si mesmo a menos que você realmente como a construção de bancos de dados.

Outras dicas

Temos vindo a trabalhar com a equipe Neo há mais de um ano e agora têm sido muito feliz. Nós modelar artefatos acadêmicos e suas relações, que está no local para um db gráfico e algoritmos de execução de recomendação sobre a rede.

Se você já está trabalhando em Java, eu acho que a modelagem usando Neo4j é muito simples e tem a / desempenho mais rápido mais plana para R / W de quaisquer outras soluções, tentámos.

Para ser honesto, eu tenho dificuldade em não pensar em termos de um gráfico / de rede, porque é muito mais fácil do que projetar estruturas de tabelas complicadas para as propriedades do objeto segurar e relacionamentos.

Dito isto, nós armazenar algumas informações no MySQL, simplesmente porque é mais fácil para o lado do negócio para executar consultas rápidas SQL contra. Para executar as mesmas funções com Neo seria preciso escrever código que nós simplesmente não têm a largura de banda para a direita agora. Assim como nós, porém, eu estou movendo todos os dados para Neo!

Boa sorte.

Dois pontos:

Em primeiro lugar, sobre os dados que eu tenho trabalhado com os últimos 5 anos em SQL Server, Eu recentemente bateu na parede escalabilidade com o SQL para o tipo de consultas que precisamos para executar (relationhsips aninhados ... você sabe. ..graphs). Eu fui brincar com Neo4j, e os meus tempos de pesquisa de várias ordens de magnitude mais rápido quando eu preciso este tipo de pesquisa.

Em segundo lugar, a tal ponto que as bases de dados de gráficos estão desatualizados. Hum ... não. Logo no início, as pessoas estavam tentando descobrir como armazenar e pesquisar dados de forma eficiente, eles criaram e jogou com modelos de banco de dados estilo gráfico e de rede. Estes foram projetados de modo que o modelo físico reflete o modelo lógico, pelo que a sua não era eficiência tão grande. Este tipo de estrutura de dados foi de boa para os dados de semi-estruturado, mas não tão bom para dados estruturados densas. Então, esse cara IBM chamado Codd estava pesquisando maneiras eficientes para organizar e armazenar dados estruturados e veio com a idéia para o modelo de banco de dados relacional. E foi bom, e as pessoas estavam felizes.

O que nós temos aqui? Duas ferramentas para dois propósitos diferentes. modelos de banco de dados de gráficos são muito bons para a representação de dados semi-estruturados e as relações entre as entidades (que podem ou não podem existir). Bancos de dados relacionais são bons para dados estruturados que tem um esquema muito estático, e onde se juntar a profundidades não ir muito profundo. Um é bom para um tipo de dados, o outro é bom para outros tipos de dados.

Para cunhar a frase, não há bala de prata. É muito míope dizer que os modelos de banco de dados gráfico estão fora de data e usar um dá-se 40 anos de progresso. Isso é como dizer usando C é desistir de todo o progresso tecnológico que passamos a fazer as coisas como Java e C #. Isso não é verdade embora. C é uma ferramenta que é necessário para determinadas tarefas. E Java é uma ferramenta para outras tarefas.

Estou usando o MySQL durante anos para gerenciar dados de engenharia, e funcionou bem, mas um dos problemas que tivemos (mas não percebemos que tinha) foi que sempre teve para planejar o esquema up-front. Outro problema sabíamos que tínhamos foi o mapeamento dos dados até objetos de domínio e de volta.

Agora que acabou de começar a experimentar Neo4j e parece que ele está resolvendo dois problemas para nós. A capacidade de adicionar propriedades diferentes para cada nó (e relação) nos permitiu repensar toda a nossa abordagem aos dados. É como dinâmica contra linguagens estáticas (rubi contra Java), mas para bancos de dados. Construir o modelo de dados no banco de dados pode ser feito de uma forma muito mais ágil e dinâmica, e que está simplificando drasticamente o nosso código.

E uma vez que o modelo de objectos em código é geralmente uma estrutura de gráfico, mapeamento da base de dados é também mais simples, com menos de código e, consequentemente, menos erros.

E como um bônus adicional, o nosso código protótipo inicial para carregar nossos dados em Neo4j é realmente executar mais rápido do que a versão do MySQL anterior. Não tenho números sólidos sobre isso (ainda), mas essa era uma característica adicional agradável.

Mas no final do dia, a escolha provavelmente deve ser baseada principalmente na natureza do seu modelo de domínio. Será que mapear melhor para tabelas ou gráficos? Decidir por fazer alguns protótipos, carregar os dados e brincar com ele. Use neoclipse de olhar para diferentes vistas dos dados. Uma vez feito isso, espero que você saiba se você estiver em uma coisa boa ou não.

Estou construindo uma intranet na minha empresa.

Estou interessado em compreender como carregar os dados que foram armazenados em tabelas (Oracle, MySQL, SQL Server, Excel, Access, várias listas aleatórios) e carregá-lo em Neo4J, ou algum outro banco de dados do gráfico. Specifcally, o que acontece quando os dados comum se sobrepõe dados já existentes no sistema.

Sim, eu sei que alguns dados é melhor modelada no RDBMS, mas eu tenho essa idéia coceira mim, que, quando você precisa para sobrepor várias tabelas distintas, o modelo gráfico é melhor do que a estrutura da tabela.

Por exemplo, eu trabalho em um ambiente de fabricação. Há um grande projecto que estamos a trabalhar e por causa da complexidade, cada departamento criou uma planilha Excel separado que tem um BOM (Bill of Materials) hierarquia em uma coluna sobre as colunas da esquerda e, em seguida, vários de notas e cheques feitos por indivíduos que fizeram estas folhas.

Assim, um dos problemas é fundir todas estas notas juntos em uma "visão" para que alguém possa ver todas as questões que precisam ser abordadas em qualquer parte particular.

O segundo problema é que uma planilha do Excel suga a representar um BOM hierarchial quando um componente comum é usado em mais de um subconjunto. O que significa que, se alguém escreve uma nota sobre o relé de P34 na ignição submontagem, o mesmo comentário deve ser associada aos P34 relés utilizados no subconjunto motorista motor. Isso não vai ocorrer na planilha excel.

Para a intranet da empresa, eu quero ser capaz de procurar qualquer coisa facilmente. Tais como dados relativos a um número de peça, uma estrutura BOM, um número de telefone, um endereço de e-mail, uma política da empresa, ou procedimento. Eu quero mesmo estender isso para gerenciar ativos de hardware de computador e software instalado.

Eu pressinto que uma vez que a rede de informação começa a ser povoada você pode começar a fazer percursos interessantes, como "Eu quero escrever um e-mail para todos os que trabalham no projeto XYZ". As pessoas vão têm sido associados com o projeto, porque eles vão ser marcado como criar e modificar os dados dentro do projeto XYZ. Então, usando o projeto XYZ como uma chave de pesquisa, um enorme conjunto com tudo relacionado ao projeto XYZ será criado. Incluindo links para as pessoas que construíram o projeto XYZ. Os links de pessoas vai se conectar a seus endereços de e-mail. Então, por seu envolvimento no projeto XYZ, eles serão incluídos no meu e-mail. Isto está em contraste gritante com algum secretário tentando manter uma lista de pessoas que trabalham no projeto. Geramos um monte de listas. Nós gastamos muito tempo manter listas e ter certeza que eles estão atualizados. E mais do que não adiciona qualquer valor aos nossos produtos.

Outra travessia legal poderia relatar todos os computadores que têm uma determinada peça de software instalado, a versão. Esse relatório pode ser usado para gerar tarefas para remover cópias extras de software de idade e para atualizar as pessoas que precisam ter a cópia mais recente. Também seria útil para rastreamento de licenças.

Aqui está um bom artigo que fala sobre as necessidades que bancos de dados não relacionais preencher: http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php

Ele faz um bom trabalho em apontar (além do nome) que bancos de dados relacionais Arent falho ou errado, é só que hoje em dia as pessoas estão começando a processo mais e mais dados em sites de software mainstream e web, e que os bancos de dados relacionais apenas não escala para essas necessidades.

pode ser um pouco tarde, mas há um número crescente de projetos usando Neo4j, os mais conhecidos listados no Neo4j. Também NeoTechnology, a empresa por trás Neo4j, tem algumas referências em sua página clientes

Nota: Eu sou parte da equipe Neo4j

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