Qual é a diferença entre um banco de dados de grafos e um banco de dados relacional?
Qual é a diferença entre um banco de dados de grafos e um banco de dados relacional?
Tanto os bancos de dados de grafos quanto os bancos de dados relacionais armazenam itens de dados relacionados com relacionamentos, no entanto, eles representam os relacionamentos de dados de forma muito diferente. Os bancos de dados relacionais armazenam dados em um formato tabular com linhas e colunas. Todos os dados também são armazenados em tabelas, e as relações entre os dados são armazenadas como referências que remetem à tabela original (também conhecidas como chaves estrangeiras). Em tempo de execução, um banco de dados relacional usa instruções JOIN para resolver explicitamente essas referências. Embora a maioria dos bancos de dados relacionais possa fazer isso com eficiência em determinadas escalas, essas operações se tornam ineficientes quando um número grande ou desconhecido dessas referências precisa ser processado, por exemplo, quando se deseja encontrar um parente por meio de um número desconhecido de conexões, como descobrir como duas pessoas estão relacionadas em uma rede social.
Por outro lado, um banco de dados de grafos armazena dados como uma rede de entidades e relacionamentos. Os bancos de dados de grafos armazenam explicitamente os dados da entidade e do relacionamento em vez de armazenar dados como referências. Em tempo de execução, um banco de dados de grafos aproveita a teoria matemática dos grafos para realizar operações com eficiência em entidades e relacionamentos. Como os relacionamentos entre entidades são armazenados explicitamente em vez de grafos calculados, os bancos de dados são mais eficientes na consulta e no gerenciamento de memória para casos de uso com interconexões de dados complexas, o que pode melhorar significativamente a performance da aplicação.
Leia sobre bancos de dados relacionais »
Leia sobre bancos de dados de grafos
Modelo de dados: banco de dados de grafos versus banco de dados relacional
Os bancos de dados de grafos e relacionais armazenam informações e representam relacionamentos entre os dados. No entanto, o modelo relacional prioriza entidades de dados, enquanto o modelo de grafo prioriza os relacionamentos entre as entidades.
Modelo de banco de dados relacional
O banco de dados relacional usa tabelas de dados que organizam as informações em linhas e colunas. As colunas contêm atributos específicos da entidade de dados, enquanto as linhas representam os registros de dados individuais.
O esquema fixo dos bancos de dados relacionais exige que você descreva os relacionamentos entre tabelas com antecedência com chaves primárias e estrangeiras.
Exemplo
Considere uma aplicação de mídia social com perfis de clientes que podem ser amigos uns dos outros. Um modelo típico precisaria de duas tabelas para modelar os dados.
A tabela de clientes pode ter a seguinte aparência:
ID |
Nome |
Local |
C1 |
Alejandro |
EUA |
C2 |
Ana |
EUA |
C3 |
Kwaku |
EUA |
C4 |
Pat |
EUA |
A tabela de amigos pode ter a seguinte aparência:
ID do cliente |
ID do amigo |
C1 |
C2 |
C1 |
C3 |
C2 |
C4 |
C2 |
C1 |
C3 |
C1 |
C3 |
C4 |
No momento da consulta, se você quisesse responder a uma pergunta como “Quais são os nomes dos amigos de Alejandro?”, o mecanismo de banco de dados primeiro encontraria a linha na tabela Cliente para Alejandro.
ID |
Nome |
Local |
C1 |
Alejandro |
EUA |
Em seguida, o mecanismo criaria uma união de todas as linhas na tabela de amigos para Alejandro usando o ID dele
ID |
Nome |
Local |
ID do cliente |
ID do amigo |
C1 |
Alejandro |
EUA |
C1 |
C2 |
C1 |
Alejandro |
EUA |
C1 |
C3 |
Agora, para cada linha, o mecanismo criaria uma união de volta à tabela do cliente para cada ID de amigo
ID |
Nome |
Local |
ID do cliente |
ID do amigo |
ID |
Nome |
Local |
C1 |
Alejandro |
EUA |
C1 |
C2 |
C2 |
Ana |
EUA |
C1 |
Alejandro |
EUA |
C1 |
C3 |
C3 |
Kwaku |
EUA |
Finalmente, o mecanismo retorna os nomes dos amigos dele.
Nome |
Ana |
Kwaku |
Como podemos ver, ao usarmos as conexões em nossos dados relacionais, acabamos criando uma grande estrutura de dados para representar as informações que queremos recuperar. Embora os bancos de dados relacionais tenham otimizações para minimizar o impacto dessas estruturas, à medida que o número de uniões aumenta, a quantidade de dados necessários aumenta significativamente, reduzindo a performance e aumentando o uso da memória.
Modelo de banco de dados de grafos
Por outro lado, um banco de dados de grafos usa uma estrutura de grafos com atributos, relacionamentos e objetos para representar dados. Nós são objetos, bordas demonstram o relacionamento entre esses nós e propriedades descrevem os atributos dos nós e das bordas. Essa estrutura dinâmica torna um banco de dados de grafos útil para representação de dados conectados. Ela oferece mais flexibilidade em relação aos relacionamentos e aos tipos de dados.
Exemplo
Usando o mesmo exemplo de dados de rede social acima, nosso banco de dados de grafos armazenaria os dados usando três nós, cada um com quatro propriedades e duas bordas.
Agora, vamos dar uma olhada em como um banco de dados de grafos processa a consulta “Quais são os nomes dos amigos de Alejandro?”.
Primeiro, procuramos nosso nó Cliente que representa o Alejandro (destacado abaixo).
Em seguida, faremos a travessia, ou passaremos pelas bordas de nossos amigos. Percorrer um banco de dados de grafos é semelhante a realizar um JOIN em um banco de dados relacional, exceto que, a menos que seja explicitamente solicitado, as informações anteriores na consulta não são retidas. Em nosso exemplo abaixo, somente as bordas dos dois amigos são retidas na memória.
Em terceiro lugar, continuamos nossa travessia até os nós adjacentes.
Finalmente, o mecanismo retorna os nomes dos amigos dele.
Nome |
Ana |
Kwaku |
Como podemos ver, os dois mecanismos são capazes de retornar as mesmas informações; no entanto, ao percorrer muitas conexões, o armazenamento explícito de relacionamentos em um banco de dados de grafos permite que ele processe essa solicitação com mais eficiência. Embora essa vantagem não seja significativa para consultas simples, como a mostrada aqui, essa otimização, junto com a estrutura das linguagens de consulta de grafos, pode reduzir significativamente a complexidade e o uso de memória para processar perguntas que exigem muitas ou um número desconhecido dessas travessias de relacionamento.
Principais diferenças: banco de dados de grafos versus banco de dados relacional
Além de seus diferentes modelos de dados, os bancos de dados relacionais e de grafos têm muitas diferenças que os distinguem em função e utilidade.
Consultas
Os bancos de dados de grafos usam linguagens de consulta personalizadas que são otimizadas para encontrar e recuperar dados conectados rapidamente. Essas linguagens, como TinkerPop Gremlin, openCypher e SPARQL, foram criadas para simplificar a escrita de consultas que aproveitam interconexões de dados complexas, como as necessárias para operações como acesso recursivo a dados, descoberta de caminhos e algoritmos de grafos.
Por outro lado, os bancos de dados relacionais empregam SQL para recuperar e manipular dados. Com o SQL, os usuários podem realizar vários tipos de consultas, como SELECT, INSERT, UPDATE e DELETE, em tabelas. Os bancos de dados relacionais se destacam no tratamento de dados estruturados com relações bem definidas entre tabelas. Eles são particularmente eficazes para realizar filtragens, agregações e junções complexas em várias tabelas.
Performance
Os bancos de dados de grafos armazenam objetos e relacionamentos como dados e usam índices para percorrer com eficiência entre entidades relacionadas. Como os bancos de dados de grafos armazenam relacionamentos como dados, o banco de dados pode navegar rapidamente entre entidades sem precisar calcular dinamicamente essas conexões. A conexão direta entre os nós permite acesso imediato, para que você possa consultar e rastrear relacionamentos rapidamente. Esses atributos tornam os bancos de dados de grafos muito eficientes.
Por outro lado, os bancos de dados relacionais usam pesquisas de índice e uniões calculadas dinamicamente para identificar relacionamentos entre entidades. Você pode unir várias tabelas, mas isso é demorado, pois o sistema precisa verificar índices maiores em busca de mais dados. Devido a isso, um banco de dados relacional não oferece a mesma performance que um banco de dados de grafos para casos de uso em que um grande número de conexões é necessário para recuperar os dados necessários.
Facilidade de uso
Os bancos de dados de grafos são centrados no relacionamento, o que facilita o trabalho com eles quando você usa dados conectados. Esses bancos de dados se destacam em consultas de vários saltos, nas quais você percorre caminhos com vários relacionamentos. Você também pode usar linguagens de consulta de grafos, como SPARQL, Gremlin ou openCypher, para expressar consultas que exploram dados interconectados com uma sintaxe simples e específica para grafos.
Os bancos de dados relacionais usam SQL, o que pode parecer pouco natural quando você gerencia consultas com vários saltos. Se uma consulta tem várias junções e abrange subconsultas aninhadas, torna-se difícil escrever o SQL. Se você não tomar cuidado, isso pode facilmente se converter em consultas volumosas que são difíceis de ler e manter.
Dito isso, os bancos de dados relacionais são maduros e populares em vários casos de uso. Existem várias ferramentas e atributos, bem como o suporte da comunidade, que você pode acessar para otimizar seu sistema.
Quando usar: banco de dados de grafos versus banco de dados relacional
Bancos de dados de grafos e relacionais têm muitos casos de uso eficazes. Por terem modelos de dados diferentes e várias distinções fundamentais, eles se destacam em diferentes áreas.
Banco de dados de grafos
Os bancos de dados de grafos fornecem um esquema flexível que permite mudanças e adaptações dinâmicas aos dados. O foco nos relacionamentos de dados o torna úteis em análises, pesquisas semânticas ou mecanismos de recomendação. Um banco de dados de grafos é a melhor escolha nestes cenários:
- Você está trabalhando com dados que têm relacionamentos complexos, como em redes sociais, detecção de fraudes, grafos de conhecimento, grafos de segurança ou mecanismos de recomendação personalizados
- Você precisa de um esquema em evolução, pois pode modificar bordas, nós e propriedades sem perturbar o restante da estrutura do banco de dados
- Você está trabalhando com dados interconectados e precisa realizar três ou mais saltos entre relacionamentos (consultas do tipo amigo do amigo)
Os bancos de dados de grafos são flexíveis, escaláveis, dinâmicos e excelentes para mostrar relacionamentos entre dados.
Banco de dados relacional
Os bancos de dados relacionais oferecem um esquema estruturado com excelente suporte à integridade dos dados. Um banco de dados relacional é a melhor escolha nestes cenários:
- Você precisa de conformidade com o ACID e de altos níveis de integridade e consistência de dados, como em transações financeiras
- Você está trabalhando com dados altamente estruturados que se encaixam bem no modelo de dados tabulares, como no gerenciamento de atributos corporativos
- Seus dados têm relacionamentos limitados
Resumo das diferenças: banco de dados relacional versus banco de dados de grafos
Bancos de dados relacionais |
Bancos de dados de gráficos |
|
Modelo |
Tabular com linhas e colunas. |
Nós interconectados com dados representados como nós e bordas |
Operações |
Operações SQL como criar, ler, atualizar e excluir (CRUD). |
As operações incluem CRUD e operações de travessia de grafos |
Performance |
Os bancos de dados relacionais enfrentam consultas complexas ao percorrer relacionamentos que podem diminuir a performance. |
Um banco de dados de grafos se destaca na representação e consulta de relacionamentos entre dados conectados. |
Facilidade de uso |
Bancos de dados relacionais funcionam bem com conjuntos de dados grandes e dados estruturados. Eles têm dificuldades quando se trata de consultas com vários saltos. |
Um banco de dados de grafos é fácil de usar ao lidar com dados centrados no relacionamento. Usando uma linguagem de consulta de grafos, você pode consultar dados de vários saltos rapidamente. |
Como a AWS pode ajudar com seus requisitos de bancos de dados relacionais e de grafos?
A Amazon Web Services (AWS) tem soluções para casos de uso de bancos de dados relacionais e de grafos.
Bancos de dados relacionais
O Amazon Relational Database Service (Amazon RDS) é um serviço gerenciado que facilita a configuração, a operação e a escalabilidade de um banco de dados relacional na nuvem. Ele fornece capacidade econômica e redimensionável e gerencia as demoradas tarefas de administração do banco de dados. O Amazon RDS oferece suporte a vários mecanismos de banco de dados, como estes:
- Amazon Relational Database Service (Amazon RDS) para SQL Server
- Amazon Relational Database Service (Amazon RDS) for MySQL
- Amazon Relational Database Service (Amazon RDS) para MariaDB
- Amazon Relational Database Service (Amazon RDS) para Oracle
- Amazon Relational Database Service (Amazon RDS) para PostgreSQL
- Amazon Relational Database Service (Amazon RDS) para Db2
O Amazon Aurora é um serviço moderno de banco de dados relacional que oferece performance e alta disponibilidade em grande escala, edições totalmente de código aberto compatíveis com MySQL e PostgreSQL. O Aurora também é um serviço totalmente gerenciado que automatiza tarefas de administração demoradas, como provisionamento de hardware, configuração de banco de dados, aplicação de patch e backups, ao mesmo tempo que oferece segurança, disponibilidade e confiabilidade de bancos de dados comerciais por uma fração do custo.
Bancos de dados de gráficos
O Amazon Neptune é um mecanismo de banco de dados de grafos com projeto específico e alta performance. Ele é otimizado para armazenar bilhões de relacionamentos e consultar o gráfico com milissegundos de latência.
O Neptune oferece suporte a modelos de grafos populares: grafo de propriedades e o Resource Description Framework (RDF) do W3C. Ele também oferece suporte a linguagens de consulta como Gremlin e SPARQL, para que você possa criar consultas que naveguem por conjuntos de dados altamente conectados.
O Neptune oferece vários atributos:
- Ele é altamente disponível com réplicas de leitura, recuperação para um ponto no tempo, backup contínuo e replicação entre zonas de disponibilidade.
- Ele é seguro e oferece suporte para criptografia em repouso.
- Além disso, ele é totalmente gerenciado. Dessa maneira, você não precisa mais se preocupar com tarefas de gerenciamento de banco de dados como provisionamento de hardware, aplicação de patches de software, instalação, configuração ou backups.
Comece a usar bancos de dados relacionais e de grafos na AWS criando uma conta hoje mesmo.