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
Por: Serdar Yegulalp
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.
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 Compostela 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.
Fonte: CIO
Texto original:
http://cio.com.br/tecnologia/2018/03/22/graph-database-uma-maneira-melhor-de-armazenar-conexoes-de-dados