BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Neo4j - Base de dados NoSQL baseada em Java

Neo4j - Base de dados NoSQL baseada em Java

Favoritos

Depois de muitos anos de desenvolvimento, a  NeoTechnology lançou a versão 1.0 do Neo4j, um banco de dados em forma de grafo feito em Java. A InfoQ falou com o COO da NeoTechnology Peter Neubauer para entender melhor o novo lançamento do NEo4j e o que ele traz de novo para os desenvolvedores.

Neo4j kernel JAR, que tem cerca de 440k, está disponível sobre as licenças AGPLv3 e sobre uma licença comercial, com a última deve ser utilizada apenas para aplicação com código fechado. As informações salvas no Neo4j são representadas usando três pilares:

  • (a.k.a vértice) - Possui o mesmo conceito de uma instância de um objeto, e possui um ID único.
  • Relacionamento (a.k.a arestas)  - Fornece uma ligação entre dois nós, ambos os nós possuem uma direção e um tipo de relacionamento.
  • Propriedade (a.k.a atributo) - São pares de String key/Objeto valor que podem existir tanto em um nó quanto em um relacionamento.

Comparado com os bancos de dados relacionais, os bancos de dados em forma de grafos tendem a serem melhores quando temos um grande volume de complexidade, estruturas de dados com baixo acoplamento que mudam frequentemente e que sofrem frequentes consultas - em um modelo relacional queries complexas podem gerar um grande número de joins, o que pode causar problemas de performance. Neubauer explica esse problema com mais detalhes, dizendo:

O Neo4j vem solucionar o problema de queda de performance entre queries que envolvem muitos joins em um RDBMS. Através da representação de dados utilizando grafos, o Neo4j consegue navegar entre os nós e os relacionamentos com uma velocidade constante, independente da quantidade de dados que constituem o grafo. Isso nos trás alguns outros efeitos como algoritmos de grafos muito rápidos, sistema de recomendação e um estilo OLAP de análise o que atualmente não é possível com configuração normais de um RDBMS.

Considerando que o Neo4j é um banco de dados, cada acesso a estrutura de grafos - leitura, escrita, e cruzamentos - são gerenciados por um sistema de transação ACID. A navegação pelo grafo é feita pela Traverser API, suporte a índices também é oferecido via integração com o Lucene, e a integração com o  Solr está sendo desenvolvida. Uma apresentação feita pelo CEO da NeoTechnology, Emil Eifrem, nos dá uma introdução mais detalhada do Neo4j, bem como uma entrevista feita com Peter Neubaur. Quando perguntado sobre sua participação no movimento NoSQL, Neubaur responde:

Nós somos, definitivamente, parte do movimento NoSQL no qual nós estamos tentando resolver problemas que os RDBMS ainda não conseguiram. Isso significa que nosso foco principal é na complexidade dos dados, queries profundas e análises - operações que requerem muitos joins e que possuem tabelas muito distantes em um RDBMS, e em segundo a escalabilidade e o sharding são tipos de problemas que outros projetos NoSQL estão se focando.

Neubauer mencionou que, apesar da versão 1.0 ter sido lançada recentemente, a equipe do Neo4j já vêm utilizando ela, em algumas áreas, a cerca de 7 anos e que a versão 1.0 vêm trazer uma estabilidade na API ao invés de uma establidade na base de código. A performance do Neo4j foi melhorada, o  Neo4j passou a aguentar  grafos com bilhões de objetos sem nenhuma alteração de código, bem como uma performance aceitável com cerca de 2 milhões de leituras de relacionamentos por segundo e com caminhos mais curtos entre eles trazendo uma melhor escalabilidade do que um banco de dados relacional como MySQL (apesar de que em todos os benchmarks, vários fatos, incluindo o hardware e os dados utilizados podem causar grandes diferenças nos resultados).

Adicionalmente ao codebase do Neo4j, existe uma comunidade de contribuidores e usuários além de um grande ecosistema presente, exemplos disso são:

Pensando nos planos para o futuro, houve um recente investimento que impulsionou o desenvolvimento de futuras features como  a melhoria na replicação master/slave e suporte a backup online o que irá trazer mais disponibilidade, melhor suporte de todas operações, e total suporte a REST (incluindo JavaScript dinâmico). Em um futuro mais distante há pretenções de oferecer suporte a sharding, que trará grande desafios para o novo codebase do Neo4j - Emil Eifrem também disse que um grande e rápido crescimento da comunidade de usuários e desenvolvedores que estão criando cada vez mais projetos com Neo4j foi importante.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT