BT
x A sua opinião é importante! Por favor preencha a pesquisa do InfoQ sobre os seus hábitos de leitura!

Um caso para bancos de dados de grafo

por Jonathan Allen , traduzido por Adriano de Almeida em 21 Set 2010 |
Nós falamos com Daniel Kirstenpfad, fundador e CTO da sones GmbH sobre Graph Databases e como eles podem melhor modelar alguns tipos de dados como relacionamentos em uma aplicação de rede social.
 
Você pode nos explicar o que é um Graph Database e porquê os desenvolvedores o devem escolher ao invés de um banco de dados tradicional?
 Ao contrário de outros bancos de dados que armazenam seus dados em linhas, colunas ou pares de chave-valor, um banco de dados de grafos armazena toda informação em uma rede de nós e arestas. As arestas representam o relacionamento entre os nós que representa os objetos. Devido aos nós e arestas serem representados como objetos (os quais os desenvolvedores estão acostumados) é possível definir atributos (também chamado de propriedades) a eles. Adicionando uma direção para uma aresta cria o conhecido grafo de propriedades que representa a explícita estrutura de dados dentro de um banco de dados de grafo.
 
Portanto, diferente de outras abordagens de banco de dados onde apenas implicitamente é possível formar uma estrutura de grafos, um banco de dados de grafo explicitamente representa um grafo. Enquanto outros bancos de dados precisam usar índices e algumas estruturas auxiliares (como tabelas de relacionamento para fazer JOINs) um banco de dados de grafo pode percorrer de um objeto aos seus objetos relacionados, pois esses objetos são organizados para possuir adjacências sem índices.
Existem diversos casos de uso onde banco de dados de grafos é a opção mais natural. Por exemplo em redes sociais é mais fácil utilizar uma estrutura de grafos para representar relações entre amigos e percorrer e realizar pesquisas como "busque todos os amigos dos amigos de meus amigos". Além disso, algoritmos comuns beaseados em grafos, como pesquisas através de um caminho, são fáceis de implementar percorrendo o grafo.
 
Além de todas essas grandes vantagens, o sones GraphDB também oferece uma linguagem fácil para realizar pesquisas que similares com consultas SQLs tradicionais. O exemplo acima resultaria em uma query parecida com: FROM Users u SELECT u.Friends.Friends.Friends WHERE Name = "Daniel"
Seu produto pode ser executado de maneira embutida ou como um serviço separado?
O sones GraphDB pode ser embutido em qualquer aplicação. Por ser escrito em C# ele pode naturalmente integrar com o ambiente .NET já existente que pode ser o Microsoft .NET no Windows ou o Mono em qualquer outra plataforma. Com os nossos atuais produtos nós estamos focando em oferecer diferentes interfaces cliente-servidor. Por exemplo, nosso produto vem com uma interface REST já integrada. Com isso não é necessário nenhum serviço de terceiros para disponibilizar um GraphDB. Tudo vem incluso em um único pacote.
Existe uma API .NET disponível?
Existe e está inclusa no release público atual. Essa API pode ser utilizada em um ambiente embutido e possui uma demonstração no repositório de exemplos: http://github.com/sones/sones/blob/master/Applications/sonesExample/sonesExample.cs -> veja linhas 74, 94, 114 e 197).
 
Atualmente nós estamos adicionando uma biblioteca cliente .NET para permitir acesso orientado a objetos para o servidor sones GraphDB sem ter que deixar o espaço conhecido do C# e sem ter que parsear XML ou JSON. Essa biblioteca está planejada para ser disponibilizada também para Java.
 
Para ir mais adiante, nós estamos planejando fazer cliente usável através do LINQ.
Alguma alteração foi necessária para oferecer a versão do Windows Azure?
Dada a complexidade da infraestrutura de um serviço de cloud foi surpreendentemente fácil permitir o nosso GraphDB rodar no Windows Azure. Nós tivemos que adicionar na maioria "glue code" para ajudar o GraphDB a se comunicar com a infraestrutura do Windows Azure. No final das contas foi apenas novo código adicionado ao GraphDB para a versão do Windows Azure. Nenhum código precisou ser alterado no core e nas interfaces.
 
Atualmente nós estamos adicionando vários módulos no GraphDB - um dos quais é um módulo que utiliza o Azure Page Blob Storage para persistir o banco de dados de grafo e permitir ainda mais interessantes cenários de usos para nossos clientes.
Existe algum outro banco de dados de grafo que você considere um concorrente?
Existem outros bancos de dados de grafos disponíveis que são em sua grande maioria focados em atingir um ou vários casos de uso e como sempre é bom para os usuários possuir opções. Como a sones começou a criar um sistema de gerenciamento de banco de dados de grafos o nosso foco é em não criar mais que isso. Para alguns casos de uso nós vemos competição em produtos como Infogrid, Neo4j ou InfiniteGraph. Quando falamos de funcionalidades como facilidade de uso e uma linguagem de consultas intuitiva, integração com .NET ou armazenamento de dados que permite não apenas armazenar grafos mas também grandes dados binários através de versões e edições que nós acreditamos possuir diversas funcionalidades únicas.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT