Banco de Dados

12 nov, 2014

ArangoDB, o banco multiuso: documento, chave-valor e grafos

Publicidade
ArangoDB
ArangoDB

Como consultor NoSQL, recebo diversos desafios de meus clientes. Um deles foi definir – preferencialmente em uma única solução – o melhor modelo de persistência orientada a documentos e que tenha suporte a estrutura de grafos. Já conhecia alguns bancos multiuso, como OrientDB e ArangoDB, mas só havia realizado testes em meu laboratório com uma quantidade pequena de dados. Tanto OrientDB, quanto o ArangoDB são muito bons, mas o ArangoDB foi a escolha mais adequada para os projetos em questão. Neste artigo, vou explicar um pouco sobre o ArangoDB em si e também o que motivou minha escolha.

Bancos multiuso

São chamados bancos multiuso aqueles que trabalham com mais de um modelo de persistência, permitindo uma flexibilidade bem maior em cada projeto. Os bancos não-relacionais são classificados de acordo com seu modelo de persistência, se dividem em documentos, chave-valor, grafos, tabulares, colunares, memória etc. É justamente nessa classificação que se encontra a maior diferença entre NoSQL e SQL. Não existe um melhor que outro, mas existe o mais adequado para cada tipo de solução.

O ArangoDB

ArangoDB
Banco Multiuso

É um banco muito novo (lançado no começo de 2014), mas que possui uma arquitetura bastante madura. Desenvolvido pela triAGENS, uma empresa alemã cheia de especialistas em bancos não relacionais. Tiveram a incrível sacada de criar um banco poderoso, escalável, livre (licença Apache), escrito em C++ e com vários diferenciais – incluindo transações ACID, quebrando alguns paradigmas acerca dos NoSQL – o que torna esse banco único e um must see.

Além dos recursos citados, o ArangoDB possui uma linguagem para consultas bastante poderosa, a AQL – ArangoDB Query Language – que permite, pasmem, JOINS! Sim, agora é possível fazer joins em bancos não relacionais! O uso de documentos agregados em bases com orientação a documentos, que são schemaless, é um grande plus dos NoSQL. Mas muitas vezes precisamos buscar informações de duas coleções diferentes, o que pode ser feito através de duas consultas na base. Mas com AQL é possível executar isso em uma única query.

O exemplo abaixo mostra os usuários com mais de 30 anos e exibe suas informações em conjunto com as informações da coleção de cidade:

1
2
3
4
5
FOR u IN users
  FILTER u.age > 30
  FOR c IN cities
    FILTER u.cityId = c.id
  RETURN { user: u, city: city }

E ainda suporta sharding, tem uma curva de aprendizado relativamente fácil (considero um pouco mais complicado que o MongoDB, mas isso se deve ao fato de ser multiuso, o que obriga ter mais controles para conseguir fazer grafos, por exemplo). No que se trata ao modelo de documentos, é muito parecido com o MongoDB, inclusive no modelo de documento propriamente dito (mesmos tipos de dados etc). Inclusive os primeiros testes eu fiz extraindo dados em formato JSON do MongoDB e importando diretamente no ArangoDB, que aceitou tudo naturalmente e não reclamou de nada.

Calma, ainda não acabou…

O ArangoDB oferece também uma interface de gerenciamento web, permitindo fazer quase todas operações no banco de dados, inclusive criar a representação visual dos grafos, veja (clique nas imagens para ampliar):

Interface web do ArangoDB
Interface web do ArangoDB – Listando as coleções de uma base

Listagem de uma coleção:

Listagem de coleção
Listagem de coleção no ArangoDB

Alterando um documento diretamente pela interface web:

Alteração de documento
Alterando documento diretamente pela interface web

E um exemplo da representação visual de um grafos, no caso, os alunos de um determinado professor (grafo bem simples, mas é possível adicionar uma série de atributos).

Representação visual de um grafo
Representação visual de um grafo com ArangoDB (clique para ampliar)

O que me motivou na escolha

Embora o ArangoDB não seja o único banco multiuso que suporta documento e grafos (citei o OrientDB no início do artigo), gostei muito da sua flexibilidade, suporte a linguagens de programação (como Python, a que mais utilizo) e por ser uma solução completa e livre. O ponto negativo do OrientDB (no meu caso, onde quase todas minhas soluções estão em Python) é o fato de ser em Java e ter que instalar toda JVM e fazer uma configuração de ambiente meio chatinha (disclaimer: não estou falando que Java é ruim, apenas informando que soluções não-java atendem melhor meus requisitos de projeto). O ArangoDB possui um ótimo gerenciamento de memória e até em um ambiente mais modesto, ele roda muito bem.

Além disso, o ArangoDB oferece muitos recursos considerados premium como parte do pacote livre. Possui também suporte comercial (para quem faz questão) e um time muito bom de desenvolvimento, com o qual tive o privilégio de trocar vários e-mails e que foram bem receptivos e responderam todas minhas dúvidas com toda atenção.

Tutorial

E para finalizar, em breve – muito breve! – vou publicar um tutorial mostrando o caminho das pedras para se iniciar no ArangoDB e como modelar uma base mulituso, com suporte a documentos e grafos. Acreditem, é um trabalho bem divertido!

***

O artigo “ArangoDB – O banco multiuso – Documento, Chave-Valor e Grafos” apareceu primeiro em http://christiano.me/arangodb-o-banco-multiuso-documento-chave-valor-e-grafos/