Header Ads

O que é um banco de dados de gráficos e para que é usado?

Eduard Muzhevskyi / Shutterstock

Bancos de dados gráficos são um tipo especial de banco de dados que armazena estruturas de dados complexas que seriam inviáveis ​​para armazenar em um banco de dados relacional tradicional. Eles são usados ​​principalmente para redes sociais, pois têm muito mais desempenho para certas consultas.

O que é um banco de dados gráfico?

Os bancos de dados gráficos são mais comumente usados ​​para dados altamente interconectados e para situações em que o conteúdo dos dados em si importa menos do que a estrutura geral.

O caso de uso mais direto para dados gráficos é para redes sociais. Considere uma rede de pessoas; cada pessoa tem uma lista de amigos e tem relações com outras pessoas. Cada pessoa também faz postagens, geralmente centenas delas. Cada postagem pode ter milhares de pessoas interagindo com ela. Portanto, apesar de o tweet ter apenas 280 caracteres, há muito mais a ser armazenado sobre ele.

Este certamente não é o único caso de uso, apenas o mais digerível — bancos de dados de gráficos são usados ​​para todos os tipos de coisas. Outro exemplo é a detecção de fraude; Digamos que você seja um banco e deseja sinalizar contas suspeitas. Pode ser um pouco duvidoso que duas contas diferentes tenham o mesmo endereço ou compartilhem números de telefone. Com um banco de dados gráfico, você pode fazer um gráfico da conexão entre as duas contas e identificar problemas como esse com muito mais eficiência do que um banco de dados relacional poderia.

Em um banco de dados de gráficos, cada objeto é chamado de nó. Um nó pode ter qualquer número de propriedades, muito semelhantes ao funcionamento de um banco de dados de documentos. Um banco de dados de documentos simplesmente armazenaria cada nó como um documento separado em uma coleção (matriz) de documentos, sem levar em conta como eles se conectam.

Publicidade

Em um banco de dados de gráficos, as conexões entre os nós são chamadas de arestas e podem conectar quaisquer dois nós de qualquer lugar da tabela. As arestas definem as relações entre os nós e podem ter tipos específicos. Por exemplo, dois amigos seriam conectados a um “ Amigos ” borda, mas um usuário seria conectado a uma postagem com uma tag “ Postado ” ou “ Gostou ” borda.

O que os torna mais rápidos?

Não é que bancos de dados relacionais como o MySQL não consigam armazenar estruturas semelhantes a gráficos — links como esses ainda são conceitos básicos para tabelas SQL. Os links formam conexões entre tabelas, permitindo que os dados sejam armazenados e atualizados em tabelas separadas, enquanto mantém um link em outro lugar no banco de dados, muito semelhante a como os ponteiros funcionam em C. No exemplo da rede social, você não gostaria de armazenar o nome de cada amigo que um determinado usuário tem, pois esse amigo pode alterar seu nome, então, em vez disso, você armazena o ID do amigo e, em seguida, realiza uma pesquisa sempre que precisar dos dados corretos. Talvez você armazene os resultados em cache para carregar um pouco do banco de dados, mas a maioria dos sistemas funcionará de forma semelhante a este.

Armazenar um conjunto de links (como uma lista de amigos) é bom, mas o problema surge quando você começa a fazer qualquer tipo de análise complexa. O exemplo clássico é a pesquisa de amigos de amigos. Para obter uma lista de todas as pessoas que têm um amigo em comum com determinada pessoa, você precisa percorrer a lista de amigos dessa pessoa e, em seguida, percorrer a lista de amigos de cada amigo e, em seguida, pesquisar para cada registro. Você também precisa ter certeza de que não está retornando registros duplicados, o que é um loop extra.

Se você estiver familiarizado com o Big O Notation, talvez já encontre o problema aqui. É um problema de complexidade exponencial; fazer vários loops aninhados como esse quebra o computador muito rapidamente. Também não é uma maneira inteligente de resolver esse problema.

Dê uma olhada neste benchmark de neo4j executando a consulta de amigos de amigos, em comparação com um banco de dados relacional tradicional (como MySQL):

No nível 2, é uma consulta simples para ambos os bancos de dados. Na profundidade 3, o MySQL se torna incapaz de realizar essa consulta em um período de tempo normal, levando 30 segundos para retornar uma resposta. Para seu crédito, ele consegue retornar a consulta de profundidade 4 após 25 minutos, embora a profundidade 5 bloqueie o banco de dados.

Publicidade

O banco de dados de gráficos não tem problemas para retornar qualquer uma dessas consultas, com todos os tempos de execução abaixo de 2 segundos, tornando-o milhares de vezes mais rápido.

Como ele faz isso? Matemática muito complicada, principalmente. Os gráficos são uma estrutura matemática fundamental e há muita teoria por trás deles, que não estamos totalmente qualificados para discutir em detalhes. Mas os gráficos relacionais são bastante simples de entender visualmente, o que facilita o trabalho com bancos de dados de gráficos na prática.

Se quiser começar a trabalhar com um, você terá que escolher e instalar um banco de dados de gráficos. O Neo4j é gratuito e de código aberto, e uma opção muito popular. A AWS tem seu banco de dados Neptune, que você pode experimentar gratuitamente, mas deve hospedar na AWS. Alguns bancos de dados de modelos múltiplos oferecem suporte a gráficos como opção, como Microsoft SQL Server, banco de dados Oracle e ArangoDB.

Nenhum comentário