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

129

Eu usei muito o banco de dados relacional e decidi me aventurar em outros tipos disponíveis.

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

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

Você os usou em um ambiente de produção? Qual foi o requisito que levou você a usá-los?

Khangharoth
fonte
Hoje, o Neo4j tem usos diferentes em empresas internacionais. Neo Tecnologia tem vários papéis brancos analisando cada um desses usos: 1. detecção de fraudes 2. recomendações em tempo real e redes sociais 3. gestão de centro de dados mais detalhes: bbvaopen4u.com/en/actualidad/...
Chirag Maliwal

Respostas:

187

Eu usei um banco de dados de gráficos em um trabalho anterior. Não estávamos usando o neo4j, era uma coisa interna construída sobre o Berkeley DB, mas era semelhante. Foi usado na produção (ainda é).

O motivo pelo qual usamos um banco de dados de gráficos foi que os dados armazenados pelo sistema e as operações que o sistema estava fazendo com os dados eram exatamente o ponto fraco dos bancos de dados relacionais e eram exatamente o ponto forte dos bancos de dados gráficos. O sistema precisava armazenar coleções de objetos que não possuem um esquema fixo e estão vinculados por relacionamentos. Para raciocinar sobre os dados, o sistema precisava realizar muitas operações que seriam algumas travessias em um banco de dados gráfico, mas que seriam consultas bastante complexas no SQL.

As principais vantagens do modelo gráfico foram o rápido tempo de desenvolvimento e a flexibilidade. Poderíamos adicionar rapidamente novas funcionalidades sem afetar as implantações existentes. Se um cliente em potencial quiser importar alguns de seus próprios dados e enxertá-los em cima do nosso modelo, geralmente isso pode ser feito no local pelo representante de vendas. A flexibilidade também ajudou quando estávamos projetando um novo recurso, evitando que tentássemos incluir novos dados em um modelo de dados rígido.

Ter um banco de dados estranho permite criar muitas de nossas outras tecnologias estranhas, fornecendo muito segredo para distinguir nosso produto dos de nossos concorrentes.

A principal desvantagem foi que não estávamos usando a tecnologia de banco de dados relacional padrão, o que pode ser um problema quando seus clientes estão envolvidos. Nossos clientes perguntariam por que não poderíamos simplesmente hospedar nossos dados em seus clusters gigantes da Oracle (nossos clientes geralmente tinham grandes datacenters). Na verdade, uma equipe reescreveu a camada do banco de dados para usar o Oracle (ou PostgreSQL ou MySQL), mas foi um pouco mais lenta que o original. Pelo menos uma grande empresa tinha uma política apenas para Oracle, mas felizmente a Oracle comprou o Berkeley DB. Também tivemos que escrever muitas ferramentas extras - não podíamos usar o Crystal Reports, por exemplo.

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

Se você estiver construindo um produto para clientes corporativos e seus dados se ajustarem ao modelo relacional, use um banco de dados relacional, se puder. Se seu aplicativo não se encaixa no modelo relacional, mas se encaixa no modelo gráfico, use um banco de dados gráfico. Se apenas se encaixa em outra coisa, use isso.

Se seu aplicativo não precisar se encaixar na arquitetura atual do blub, use um banco de dados de gráficos, ou CouchDB, ou BigTable, ou o que for adequado ao seu aplicativo e você achar que é legal. Pode lhe dar uma vantagem e é divertido experimentar coisas novas.

Qualquer que seja a sua escolha, tente não criar o mecanismo de banco de dados a menos que você realmente goste de criar mecanismos de banco de dados.

Will Harris
fonte
66
Grande resposta, e +1 para "tentar não construir o motor de banco de dados a si mesmo a menos que você realmente como a construção de bancos de dados", rotfl
Michał Chaniewski
32

Trabalhamos com a equipe Neo há mais de um ano e estamos muito felizes. Modelamos artefatos acadêmicos e seus relacionamentos, que estão no local para um gráfico db, e executamos algoritmos de recomendação na rede.

Se você já está trabalhando em Java, acho que a modelagem usando o Neo4j é muito direta e tem o desempenho mais plano / rápido para R / W de qualquer outra solução que tentamos.

Para ser sincero, não consigo pensar em termos de gráfico / rede, porque é muito mais fácil do que projetar estruturas de tabela complicadas para manter propriedades e relacionamentos de objetos.

Dito isto, armazenamos algumas informações no MySQL simplesmente porque é mais fácil para o lado comercial executar consultas SQL rápidas. Para executar as mesmas funções com o Neo, precisaríamos escrever código para o qual simplesmente não temos largura de banda no momento. Assim que o fizermos, estou transferindo todos esses dados para o Neo!

Boa sorte.

DataRiot
fonte
1
você poderia me dizer que tipo de informação você armazena no MySQL? Vou criar uma nova comunidade. Posso armazenar todas as informações "regulares", como nome de usuário, senha, nome e sobrenome e assim por diante, no neo4j, ou não é realmente adequado para isso? : o
Muqito 23/05
3
Você pode absolutamente armazenar todas essas informações no Neo. Criei alguns sistemas em que todas as informações da conta estão no gráfico. O tipo de informação que eu normalmente armazeno fora do gráfico são grandes volumes de dados de séries temporais que precisam ser consultados para geração de relatórios.
DataRiot
1
Se você estiver trabalhando na pilha .Net / Microsoft, o Neo4jCLient funcionará bem.
Manuel Hernandez
23

Dois pontos:

Primeiro, nos dados com os quais trabalhei nos últimos 5 anos no SQL Server, recentemente atingi o nível de escalabilidade com o SQL para o tipo de consultas que precisamos executar (relações aninhadashsips ... você sabe ... gráficos ) Venho brincando com o neo4j, e meus tempos de pesquisa são várias ordens de magnitude mais rápidos quando eu preciso desse tipo de pesquisa.

Segundo, ao ponto de os bancos de dados gráficos estarem desatualizados. Hum ... não. Desde o início, quando as pessoas tentavam descobrir como armazenar e pesquisar dados com eficiência, elas criaram e brincaram com modelos de banco de dados de estilo de rede e gráfico. Eles foram projetados para que o modelo físico refletisse o modelo lógico, de modo que sua eficiência não era tão boa. Esse tipo de estrutura de dados era bom para dados semiestruturados, mas não tão bom para dados densos estruturados. Portanto, esse cara da IBM chamado Codd estava pesquisando maneiras eficientes de organizar e armazenar dados estruturados e teve a ideia do modelo de banco de dados relacional. E foi bom, e as pessoas ficaram felizes.

O que temos aqui? Duas ferramentas para dois propósitos diferentes. Os modelos de banco de dados de gráficos são muito bons para representar dados semiestruturados e os relacionamentos entre entidades (que podem ou não existir). Os bancos de dados relacionais são bons para dados estruturados que possuem um esquema muito estático e onde as profundidades de junção não são muito profundas. 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 de gráficos estão desatualizados e, ao usar um, desiste de 40 anos de progresso. É como dizer que usar C é abrir mão de todo o progresso tecnológico que passamos para obter coisas como Java e C #. Isso não é verdade. C é uma ferramenta necessária para determinadas tarefas. E o Java é uma ferramenta para outras tarefas.

Turbo
fonte
15

Uso o MySQL há anos para gerenciar dados de engenharia, e funcionou bem, mas um dos problemas que tivemos (mas não percebemos) era que sempre tínhamos que planejar o esquema antecipadamente. Outro problema que sabíamos que tínhamos era mapear os dados para objetos de domínio e vice-versa.

Agora começamos a experimentar o neo4j e parece que está resolvendo os dois problemas para nós. A capacidade de adicionar propriedades diferentes a cada nó (e relação) nos permitiu repensar toda a nossa abordagem aos dados. É como linguagens dinâmicas versus estáticas (Ruby versus Java), mas para bancos de dados. A criação do modelo de dados no banco de dados pode ser feita de uma maneira muito mais ágil e dinâmica, o que simplifica dramaticamente o nosso código.

E como o modelo de objeto no código geralmente é uma estrutura gráfica, o mapeamento a partir do banco de dados também é mais simples, com menos código e consequentemente menos bugs.

E como um bônus adicional, nosso código de protótipo inicial para carregar nossos dados no neo4j está realmente executando mais rápido que a versão anterior do MySQL. Ainda não tenho números sólidos sobre isso, mas esse foi um ótimo recurso adicional.

Mas, no final das contas, a escolha provavelmente deve se basear principalmente na natureza do seu modelo de domínio. Mapeia melhor para tabelas ou gráficos? Decida fazendo alguns protótipos, carregue os dados e brinque com eles. Use neoclipse para observar diferentes visualizações dos dados. Depois de fazer isso, espero que você saiba se está ou não com uma coisa boa.

Craig Taverner
fonte
1
A partir de agora, não tenho nenhum requisito comercial para usar o Graphic Db.Isto pode ser porque não penso em outra coisa senão o RDBMS. Pode ser possível que na maioria das vezes eu esteja tentando usar o Peg quadrado no furo circular. Db baseado em gráfico é totalmente uma nova perspectiva para mim.Eu usei a estrutura de persistência baseada em Scenegraph (Java3D, Xith3D), mas isso era para armazenar aplicativos baseados em gráficos. Toda essa conversa está me dando uma nova perspectiva. Qualquer atualização de aplicativo que esteja usando Db baseado em gráfico que eu possa ver as coisas em ação!
Khangharoth
4

Estou construindo uma intranet na minha empresa.

Estou interessado em entender como carregar dados armazenados em tabelas (Oracle, MySQL, SQL Server, Excel, Access, várias listas aleatórias) e carregá-los no Neo4J ou em outro banco de dados de gráficos. Especificamente, o que acontece quando dados comuns se sobrepõem aos dados já existentes no sistema.

Sim, eu sei que alguns dados são melhor modelados no RDBMS, mas eu tenho essa ideia, que quando você precisa sobrepor várias tabelas distintas, o modelo de gráfico é melhor que a estrutura da tabela.

Por exemplo, eu trabalho em um ambiente de fabricação. Há um projeto importante em que estamos trabalhando e, devido à complexidade, cada departamento criou uma planilha do Excel separada que possui uma hierarquia de BOM (lista de materiais) em uma coluna à esquerda e várias colunas de anotações e verificações feitas por indivíduos quem fez essas folhas.

Portanto, um dos problemas é mesclar todas essas notas em uma "visualização" para que alguém possa ver todos os problemas que precisam ser abordados em qualquer parte específica.

O segundo problema é que uma planilha do Excel representa uma lista técnica hierárquica quando um componente comum é usado em mais de uma submontagem. Isso significa que, se alguém escrever uma observação sobre o relé P34 no subconjunto da ignição, o mesmo comentário deverá ser associado aos relés P34 usados ​​no subconjunto do acionador do motor. Isso não ocorrerá na planilha do Excel.

Para a intranet da empresa, desejo poder pesquisar qualquer coisa facilmente. Como dados relacionados a um número de peça, uma estrutura de lista técnica, um número de telefone, um endereço de email, uma política ou procedimento da empresa. Quero estender isso para gerenciar ativos de hardware de computador e software instalado.

Eu imagino que uma vez que a rede de informações comece a ser preenchida, você poderá começar a fazer travessias interessantes, como "Quero escrever um email para todos que trabalham no projeto XYZ". As pessoas serão associadas ao projeto porque serão marcadas como criando e modificando os dados no projeto XYZ. Portanto, usando o projeto XYZ como chave de pesquisa, será criado um conjunto enorme com tudo relacionado ao projeto XYZ. Incluindo links para pessoas que criaram o projeto XYZ. Os links de pessoas se conectarão aos seus endereços de email. Portanto, pelo envolvimento deles no projeto XYZ, eles serão incluídos no meu e-mail. Isso contrasta fortemente com alguma secretária que tenta manter uma lista de pessoas que trabalham no projeto. Geramos muitas listas. Nós gastamos muito tempo mantendo listas e certificando-nos de que estão atualizadas.

Outro percurso interessante pode relatar todos os computadores que possuem um determinado software instalado, por versão. Esse relatório pode ser usado para gerar tarefas para remover cópias extras de software antigo e atualizar as pessoas que precisam ter a cópia mais recente. Também seria útil para rastreamento de licenças.

Paul Bock
fonte
@ Paul Bock: Eu acho que seria realmente uma boa solução resolver esse tipo de problema usando o neo4j. Se você entrar na lista de e-mails, tenho certeza de que pode obter muitas informações da comunidade: neo4j.org/community/list
nawroth
2
Não vejo como isso não pôde ser feito em um banco de dados relacional. Estou esquecendo de algo?
9788 Andrew
5
Não acho que nenhuma discussão sobre o 'NoSQL' se concentre no que não pode ser feito com bancos de dados relacionais, a menos que envolva dimensionamento. Eu acho que é muitas vezes (pelo menos para mim é) sobre como natural, uma solução é, como ele é eficiente na resolução de seus problemas, etc.
Eelco
4

Aqui está um bom artigo que fala sobre as necessidades que os bancos de dados não relacionais preenchem: 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 os bancos de dados relacionais não são falhos ou errados, é apenas que hoje em dia as pessoas estão começando a processar mais e mais dados nos principais softwares e sites da Web, e que os bancos de dados relacionais não costumam ser dimensionados para essas necessidades.

Universidade Angular
fonte
3

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

Nota: eu faço parte da equipe Neo4j

Peter Neubauer
fonte