Home > Tendências

Graph database: uma maneira melhor de armazenar conexões de dados

Saiba por que elas são excelentes para explorar dados altamente conectados e como aproveitá-los em sua organização

Serdar Yegulalp, Infoworld/EUA

22/03/2018 às 13h26

grafos_1037533882.jpg
Foto:

Key-value, orientada para documentos, orientada a colunas,
relacional... são tantos os tipos de bancos de dados quanto os tipos de dados disponíveis hoje em dia. Apesar disso dificultar a escolha de um banco de
dados, também facilita a escolha da base mais adequada. Essa escolha, no entanto, prescinde de uma “lição de casa”; você precisa conhecer os bancos de
dados. 

Dito isso, vale lembrar que um dos tipos de banco de dados menos conhecido por aí é o banco de dados de grafos (graph database). Feitos para trabalhar com dados
altamente interconectados, eles podem ser descritos como bancos mais “relacionais” do que uma típico banco de dados relacional. Isso por que as bases de
grafos brilham quando o objetivo é capturar relações complexas em redes
de informações amplas.

Confira abaixo um olhar mais próximo sobre esses bancos de dados de grafos,
por que elas são diferentes de outros bancos de dados, e quais tipos de
problemas eles ajudam a resolver.

Bancos de dados de grafos vs. Bancos de dados relacionais
Em um banco de dados relacional tradicional ou uma base SQL, os dados são
organizados em tabelas. Cada tabela registra dados em um formato específico, com
um número fixo de colunas, cada coluna com seu próprio tipo de dado (hora/data,
texto em formato livre, total, etc.).

Esse modelo funciona melhor quando você está lidando com dados de qualquer uma das tabelas. Ele também funciona de
forma razoável quando você está agregando dados armazenados em múltiplas
tabelas. Mas esse comportamento possui alguns limites notáveis. 

Considere um banco de dados musical, com álbuns, bandas, gravadoras e artistas. Se você quer
reportar todos os artistas que participam de um álbum daquela banda lançado por
aquelas gravadoras – quatro tabelas diferentes – então terá de descrever
explicitamente essas relações. Com um banco de dados relacional, você consegue
isso por meio de novas colunas de dados (para relacionamentos ‘um a um’ ou ‘um
para muitos’), ou novas tabelas (para relações de ‘muitos para muitos’).

Isso é prático se você estiver gerenciando um número modesto de
relações. No entanto, caso esteja lidando com milhões ou até bilhões de relações – amigos
de amigos de amigos, por exemplo – essas consultas não escalam muito bem.

Resumindo: se as relações entre os dados, e não os dados em si,
são a sua preocupação principal, então um tipo diferente de base de dados – um banco de grafos – é mais recomendado.

Recursos de bancos de dados de grafos
O termo “graph” (“grafo”) vem do uso da palavra na matemática. Lá,
ela é usada para descrever uma coleção de nós (ou vertentes), que contém
informações (propriedades), e relações classificadas entre os nós.

Uma rede social é um bom exemplo de uso de banco de dados de grafos. As pessoas na rede
seriam os nós, os atributos de cada pessoa (como nome, idade, e por aí vai)
seriam as propriedades, e as linhas conectando as pessoas (com classificações
como “amigo”, “mãe” ou “supervisor”) indicariam as suas relações.

Em um banco de dados convencional, as consultas sobre as relações
podem levar muito tempo para serem processadas. Isso acontece porque as
relações são implementadas por chaves externas e consultadas ao combinar as
tabelas. Como qualquer administrador de bancos de dados SQL pode te dizer,
realizar essas ligações/combinações é um processo caro, especialmente quando
você precisa selecionar entre grandes números de objetos. Ou, pior ainda,
quando você precisa combinar várias tabelas para realizar esses tipos de
consultas indiretas (por exemplo: “amigo de um amigo”) em que as bases de dados
de grafos se saem muito bem.

Os bancos de dados de grafos funcionam ao armazenar as relações
juntamente com os dados. Como os nós relacionados são fisicamente ligados à
base de dados, acessar essas relações é algo tão imediato quanto acessar os
dados em si. Em outras palavras: em vez de calcular a relação como as bases de
dados relacionais precisam fazer, as bases de dados de grafos simplesmente leem
a relação a partir do armazenamento. 

Um banco de dados de grafos não apenas armazena as relações entre
os objetos de uma maneira nativa, tornando rápidas e fáceis as consultas sobre
as relações, mas permite que você inclua diferentes tipos de objetos e relações
nos grafos. 

Como outros bancos de dados NoSQL, um banco de dados de grafos é um banco sem esquema. Assim, em termos de desempenho e flexibilidade, os bancos de
grafos se aproximam mais de bases de documentos ou key-value do que dos bancos relacionais ou orientados a tabelas.

Usos para bancos de dados de grafos
Os bancos de dados de grafos funcionam melhor quando os dados com os quais
você está trabalhando são altamente conectados e devem ser representados a partir de como se conectam ou se correlacionam com outros dados, normalmente por meio de
relações ‘muitos para muitos’.

Mais uma vez, uma rede social é um exemplo útil. Um banco de dados de
grafos reduz a quantidade de trabalho necessária para construir e exibir as
visualizações de dados encontradas em redes sociais, como feeds de atividades,
ou determinar se você conhece ou não uma determinada pessoa por conta da
proximidade que ela tem com outros amigos seus na plataforma.

Outra aplicação para eles é encontrar padrões de
conexão em dados que seriam difíceis de visualizar por meio de outras
representações de dados. Os sistemas para detecção de fraude usam bancos de
dados de grafos para jogar luz sobre relações entre entidades que poderiam ser
difíceis de encontrar de outras formas.

De forma parecida, os bancos de dados de grafos são uma combinação
natural para aplicações que gerenciam relações ou interdependências entre
entidades. Você normalmente vai encontrar bancos de grafos por trás de engines
de recomendações, sistemas de gerenciamento de conteúdos e assets, sistemas de
gerenciamento de acesso e identidade, e soluções de gerenciamento de risco e
regulamentação de compliance.

Consultas
Os bancos de dados de grafos – assim como outros databases NoSQL – costumam usar
as suas próprias metodologias de consulta, em vez de SQL.

Uma linguagem de consulta de grafos bastante usada é a Cypher,
desenvolvida originalmente para a base de grafos Neo4j. Desde o final de 2015,
a Cypher passou a ser desenvolvida como um projeto open-source separado, e uma
variedade de outras empresas a adotaram como um sistema de consulta para os seus
produtos.

Outra linguagem de consultas comum, a Gremlin, foi planejada para
o framework de computação de grafos Apache TinkerPop. Muitas bases de dados de
grafos possuem suporte para a Gremlin por meio de uma biblioteca, própria ou de terceiros.

Por fim, vale citar mais uma linguagem de consulta: a SPARQL. Ela
foi desenvolvida originalmente pela W3C para consultar dados armazenados no
formato Resource Description Framework (RDF). Em outras
palavras, a SPARQL não foi desenvolvida para buscas em bases de grafos, mas
pode ser usada para isso.

De forma geral, a Cypher e a Gremlin são usadas mais amplamente.

grafo

Bancos de dados de grafos mais populares
Como os bancos de dados de grafos servem a casos de uso relativamente de
nicho, não existem tantos deles quanto existem bancos de dados relacionais, por exemplo.
Pelo lado positivo, isso facilita identificar (e falar) sobre os melhores
produtos disponíveis no mercado.

1 - Neo4j
A Neo4j é facilmente o banco de dados de grafos mais maduro (há
cerca de 11 anos no mercado) e conhecido para uso geral. Ao contrário de
produtos anteriores do tipo, não usa um back-end SQL. O Neo4j é um banco de
dados de grafos nativo que foi criado de dentro para fora para oferecer suporte
para grandes estruturas de grafos, como em questões que retornam centenas de
milhares de relações.

O Neo4j possui edições gratuitas open-source e pagas para
empresas, com a segunda opção se diferenciando por não ter restrições quanto ao
tamanho do conjunto de dados (entre outros recursos). Também é possível
experimentar a Neo4j online por meio da sua sandbox, que inclui alguns
exemplos de datasets para treinar.

2 - Microsoft Azure Cosmos DB
O banco de dados na nuvem Azure Cosmos DB é um projeto ambicioso.
Ele tem o objetivo de emular diversos tipos de bancos de dados – tabelas
convencionais, orientados para documentos, orientados para colunas, e de grafos
– tudo isso por meio de um único serviço unificado com um conjunto consistente
de APIs.

Por conta disso, um banco de dados de grafos é apenas um dos
diversos modos em que a Cosmos DB pode operar. Ele usa a linguagem e API
Gremlin para consultas de grafos, e oferece suporte para o console Gremlin
criado para Apache TinkerPop como outra interface.

Outro atrativo do Cosmos DB é que a indexação, o dimensionamento e
a geo-replicação são todas feitas automaticamente na nuvem da Azure, sem que
seja preciso nenhum esforço do seu lado. Não está claro como a arquitetura
“tudo em um” da Microsoft se sai em termos de desempenho quando comparada a um banco de dados de grafos nativo. Mas a Cosmos DB certamente oferece uma
combinação interessante de flexibilidade e escala.

3 - JanusGraph
O JanusGraph foi criado a partir do projeto TitanDB, e agora está
sob o controle da Linux Foundation. Ele usa uma variedade de back-ends
suportados - Apache Cassandra, Apache HBase, Google Cloud Bigtable e Oracle
BerkeleyDB – para armazenar dados de grafos, suporta a linguagem Gremlin (assim
como outros elementos do stack Apache TinkerPop) e também pode incorporar
buscas em texto completo pelos projetos Apache Solr, Apache Lucene ou
Elasticsearch.

A IBM, uma das apoiadoras do projeto JanusGraph, oferece uma
versão do bancp hospedada na IBM Cloud – chamado de Compose
for JanusGraph
. Assim como o Azure Cosmos DB, o Compose for JanusGraph
fornece dimensionamento automático e alta disponibilidade, com preços baseados
no uso de recursos.

Junte-se a nós e receba nossas melhores histórias de tecnologia. Newsletter Newsletter por e-mail