Este artigo foi publicado em 08/09/2015. Por ter sido considerado um dos melhores artigos de 2015, foi republicado hoje.
Os Bancos de Dados de Grafos representam, de forma elegante e eficiente, entidades (também chamadas de vértices ou nós) ligadas entre elas pelas arestas (ou relationships). Aqui está um exemplo simples de um gráfico:
Bill e Candace têm uma filha chamada Janet, e ela tem um filho chamado Bob. Isso faz com que Candace seja avó de Bob, e Bill seja seu avô.
Uma vez que um grafo foi construído, ele é processado atravessando as arestas entre os vértices. No grafo acima, podemos atravessar de Bill para Janet, e de lá para Bob. Os grafos podem ser usados para modelar redes sociais (amigos e “Curtir”), relações de negócios (empresas, funcionários, parceiros, fornecedores e clientes), dependências, e assim por diante. Tanto os vértices quanto as arestas podem ser editados; alguns vértices poderiam ser pessoas como no nosso exemplo, e outros poderiam ser lugares. Da mesma forma algumas arestas poderiam denotar (como acima) relações familiares e outras arestas poderiam denotar “curtidas”. Cada banco de dados de grafos permite que informações adicionais sejam anexadas a cada vértice e a cada aresta, muitas vezes sob a forma de pares nome-valor.
O Titan é um banco de dados de grafos escalável otimizado para armazenar e consultar grafos que contêm centenas de bilhões de vértices e arestas. É transacional, e pode suportar o acesso simultâneo de milhares de usuários.
DynamoDB Storage Backend para Titan
A camada de armazenamento de dados plugáveis do Titan já suporta várias bases de dados NoSQL e armazenamento key-value. Isso te permite escolher o backend que fornece o desempenho e os recursos necessários para a sua aplicação, dando-lhe a liberdade de mudar de um backend para outro com mudanças mínimas no código do aplicativo.
Agora estamos disponibilizando o novo DynamoDB Storage Backend para Titan. Armazenar seus grafos do Titan no Amazon DynamoDB permite dimensionar para lidar com grandes grafos sem ter que se preocupar com a construção, execução, ou manter o seu próprio cluster de banco de dados. Como o DynamoDB pode ser escalado para qualquer tamanho e, ainda, oferece alta disponibilidade de dados e desempenho previsível, você pode se concentrar na sua aplicação, em vez de no seu armazenamento e infraestrutura de processamento do grafo. Você também pode executar o Titan e o DynamoDB Local no seu laptop para desenvolvimento e testes.
O backend funciona com as versões 0.4.4 e 0.5.4 do Titan. Ambas as versões suportam percursos rápidos, arestas que são tanto dirigidas como digitadas e relacionamentos armazenados. A versão mais recente adiciona suporte para particionamento de vértices, etiquetas de vértices, e armazenamento de transações definidas por usuários. A infraestrutura é baseada no cliente; nós não efetuamos quaisquer alterações no DynamoDB para apoiá-lo. Você estará simplesmente usando o DynamoDB como uma forma eficiente de armazenar seus grafos Titan.
A versão 0.4.4 do Titan é compatível com a versão 2.4 da pilha Tinkerpop; a versão 0.5.4 de Titan é compatível com a versão 2.5 da pilha. Tinkerpop é uma coleção de ferramentas e algoritmos que fornece ainda mais opções de processamento e análise de grafos.
Já que eu estou falando de grafos, eu deveria mostras todos os itens de que eu falei sob a forma de um grafo! Aqui está:
O meu colega Alex Patrikalakis criou o seguinte script Gremlin. Ele replica o grafo acima usando Titan e DynamoDB:
\conf = new BaseConfiguration() conf.setProperty("storage.backend", "com.amazon.titan.diskstorage.dynamodb.DynamoDBStoreManager") conf.setProperty("storage.dynamodb.client.endpoint", "http://localhost:4567") g = TitanFactory.open(conf) titan = g.addVertex(null, [name:"Titan"]) blueprints = g.addVertex(null, [name:"Blueprints"]) pipes = g.addVertex(null, [name:"Pipes"]) gremlin = g.addVertex(null, [name:"Gremlin"]) frames = g.addVertex(null, [name:"Frames"]) furnace = g.addVertex(null, [name:"Furnace"]) rexster = g.addVertex(null, [name:"Rexster"]) DynamoDBStorageBackend = g.addVertex(null, [name:"DynamoDB Storage Backend for Titan"]) DynamoDBLocal = g.addVertex(null, [name:"DynamoDB Local"]) DynamoDB = g.addVertex(null, [name:"DynamoDB"]) g.addEdge(titan, blueprints, "implements") g.addEdge(pipes, blueprints, "builds-on") g.addEdge(gremlin, blueprints, "builds-on") g.addEdge(frames, blueprints, "builds-on") g.addEdge(furnace, blueprints, "builds-on") g.addEdge(rexster, blueprints, "builds-on") g.addEdge(titan, DynamoDBStorageBackend, "backed-by") g.addEdge(DynamoDBStorageBackend, DynamoDBLocal, "connects-to") g.addEdge(DynamoDBStorageBackend, DynamoDB, "connects-to") g.commit()
Começando
O DynamoDB Storage Backend para Titan está disponível como um projeto Maven no GitHub. Ele roda em Windows, OSX e Linux e requer Maven e Java 1.7 (ou posterior). O Amazon DynamoDB Storage Backend para Titan inclui instruções de instalação e um exemplo que faz uso criativo do conjunto de dados públicos Marvel Universe Social Graph. Nos também criamos um modelo do CloudFormation que vai lançar uma instância EC2 que tem a pilha Titan/Rexster e o DynamoDB Storage Backend para Titan instalado e pronto para uso.