RedisGraph é um banco de dados em grafo desenvolvido pela Redis Labs[2], e disponibilizado como um módulo para o banco de dados Redis.

RedisGraph
Ficheiro:Redisgraph-logo.svg
Desenvolvedor Redis Labs
Modelo do desenvolvimento Software de código aberto
Lançamento 12 de novembro de 2018 (5 anos)
Versão estável 2.2.0 (22 de junho de 2020; há 3 anos)
Escrito em C
Sistema operativo Multiplataforma
Gênero(s) Banco de dados em Grafo
Licença Redis Source Available License Agreement
Página oficial oss.redislabs.com/redisgraph[1]

O RedisGraph foi implementado com foco em performance nas operações do banco de dados. Atualmente o projeto é disponibilizado através de uma licença própria e pública [1] no formato de código aberto.

RedisGraph representa os dados e relacionamentos utilizando matrizes esparsas de adjacência. O projeto optou por representar os dados desta forma, para que seja possível explorar funcionalidades do GraphBLAS, o qual é uma biblioteca que possui alto desempenho em operações com matrizes esparsas.

Histórico e Versões editar

O RedisGraph foi desenvolvido pela empresa RedisLabs utilizando a linguagem de programação C. O projeto é disponibilizado pela empresa desenvolvedora na forma de código aberto e utilizada a licença Redis Source Available License Agreement. O código fonte é disponibilizado através de um repositório público no GitHub.

A primeira versão do banco de dados foi lançada em Dezembro de 2018. Os resultados experimentais apresentados pela RedisLabs mostravam que o novo produto superou seus concorrentes em termos de desempenho nas tarefas de banco de dados.

Devido aos resultados de performance e a popularidade do banco de dados Redis, plataforma a qual o RedisGraph foi baseado, a comunidade aderiu ao novo módulo. Com isso, o RedisGraph passou a lançar versões, contendo novas funcionalidades e correções, de forma frequente[3]. A última versão estável é a 2.0.10 e foi lançada em Março de 2020.

Histórico de versões
Versão Data Notas de Lançamento
1.0.0 2018-11-12 Versão inicial.
1.0.1 2018-11-22
  • Correção de vazamentos de memória
  • Suporte para "*" na cláusula RETURN
  • Adicionada a função TYPE
  • Suporte inicial à cláusula UNWIND
1.0.2 2018-11-22
  • Correção do defeito: A operação de redefinição no plano de execução deve ser propagada
1.0.3 2018-12-02
  • GraphBLAS 2.2
  • Várias cláusulas CREATE
  • Várias cláusulas MATCH
  • Correções de defeitos
1.0.4 2018-12-10
  • GraphBLAS compacto, usando semi-anel estrutural
1.0.5 2018-12-16
  • A inserção em massa suportando os identificadores
  • Atributos de relacionamentos
1.0.7 2018-12-02
  • Melhorias de performance durante inserção em massa
1.0.8 2018-12-25
  • Utilização do índice ao executar produto cartesiano
  • Aumentar o uso das funções rm_malloc no módulo
  • Permitir serialização de propriedades com valor NULL
  • Suporte para vários tipos de relacionamento
1.0.9 2019-01-06
  • Suporte para misturar cláusulas MERGE e SET
1.0.10 2019-01-10
  • Atualizar índices quando MERGE criar novas entidades
1.0.11 2019-01-17
  • Requisito de OpenMP removido
1.0.12 2019-01-28
  • Otimização para reduzir o número de matrizes transpostas durante operações
1.0.13 2019-02-06
  • Reutilização de nome de atributo para evitar duplicação
1.0.14 2019-02-21
  • Atualização de licença
2.0.0 2020-01-30
  • Busca por textos completos usando grafos
  • Resposta gráfica completa, permitindo visualização.
  • Quantidade substancial de cobertura Cypher.
  • Melhorias de desempenho de até 4x em comparação com versões anteriores
2.0.8 2020-03-18
  • Correção na verificação da quantidade de argumentos de grafos
2.0.10 2020-03-29
  • Correções na interpretação de expressões algébricas
  • Suporte às cláusulas SKIP e LIMIT

Estrutura de Dados editar

A estrutura de dados utilizada para a modelagem de um banco de dados do tipo RedisGraph é do tipo grafo direcionado. Neste caso, os nós são as entidades envolvidas na modelagem e os relacionamentos são armazenados em matrizes esparsas de adjacência, conforme dito anteriormente. Via de regra, as linhas de uma matriz de adjacência se referem aos nós de origem, enquanto que as colunas aos nós de destino.

Exemplificando de forma simplificada o funcionamento de nós e arestas, seja   um nó de origem que apresenta um relacionamento com um nó   de destino. O esquema apresentado a pouco é gravado em uma matriz de adjacência  . Logo, na célula de convergência entre a linha correspondente ao nó de origem   e a coluna correspondente ao nó de destino  , teremos um valor não nulo, indicando que existe um relacionamento entre os dois nós. Matematicamente podemos expressar o esquema como:

 

Todo grafo armazenado no RedisGraph possui pelo menos uma matriz de adjacência. Adicionalmente a esta, todo relacionamento com qualquer outro tipo de grafo requer uma matriz de adjacência dedicada. Por exemplo, imaginemos que temos um banco um banco de dados RedisGraph para armazenar dois tipos de relacionamento: Consultas e médicos. Neste tipo de relacionamento, teremos as seguintes matrizes esparsas de adjacência:

  1. Matriz para armazenar o relacionamento dos nós internos do grafo.
  2. Matriz de consulta para armazenar as ocorrências de visitas aos médicos.
  3. Matriz de médicos para armazenar os médicos de determinado nó.

A arquitetura definida na construção do RedisGraph foca na simplicidade e performance para executar operações de banco de dados. Para adicionar ou remover nós em determinado grafo, o RedisGraph adiciona ou remove novas linhas e colunas em sua matriz de adjacência. Ao criar novos relacionamentos, um valor representativo é atribuído em sua matriz de adjacência. Desta forma, para remover um relacionamento, é atribuído um valor não representativo em sua matriz de adjacência.


Linguagem de Consulta editar

O RedisGraph adotou a linguagem Cypher para a escrita de consultas. A linguagem Cypher, atualmente, é o padrão de linguagem de consulta mais adotado entre os bancos de dados em grafo [4]. Entretanto, o RedisGraph optou por adotar apenas a sintaxe desta linguagem, deixando de utilizar seu interpretador nativo. Com isso, o RedisGraph implementa seu próprio interpretador Cypher, utilizando novamente a linguagem C. Atualmente, apenas um subconjunto das instruções Cypher estão implementadas no interpretador do RedisGraph. As demais instruções vem sendo desenvolvidas de acordo com a necessidade da comunidade e disponibilizadas como uma nova versão do banco de dados.

Para demonstrar a sintaxe e funcionamento da linguagem de consulta adotada pelo RedisGraph, consideremos a seguinte consulta abaixo, a qual seleciona todos os atores com mais de 30 anos de idade que atuaram com Aldis Hodge:

MATCH (aldis::ator {nome:"Aldis Hodge"})-[ator]->(m:filme)<-[ator]-(a:ator) WHERE a.idade > 30 RETURN m.titulo, a.nome

A palavra reservada MATCH indica que o comando a ser executado no RedisGraph sera de leitura. Em seguida, temos o trecho (aldis::ator {name:"Aldis Hodge"}), que selecionará nós que possuem o atributo nome igual a Aldis Hodge, no grafo de atores. Após selecionado o nó alvo no grafo de atores, o trecho [act]->(m:filme) da consulta solicita que o banco de dados carregue os nós relacionados a este ator, no grafo de filmes. Recuperados os nós do grafo movie que estão relacionados com o ator Aldis Hodge, a consulta solicita que o RedisGraph carregue todos os atores que possuem relacionamento com os nós de filmes, por meio do trecho (m:filme)<-[ator]-(a:ator). Carregado todo este conjunto de dados, o RedisGraph aplica o filtro declarado por meio da palavra reservada WHERE, que indica que serão selecionados apenas os registros que possuem o atributo age, do grafo de atores, maior que o valor 30. Aplicado o filtro no conjunto de dados selecionado, a palavra reservada RETURN indicará quais atributos serão retornados para o cliente da consulta. No caso da consulta de exemplo, serão retornados os campos título e nome, os quais pertencem aos grafos de filmes e atores, respectivamente.

Veja Também editar

Referências editar

  1. a b Redis Labs. «Redis Licensing Overview». Consultado em 23 de junho de 2020 
  2. Redis Labs. «Redis Labs Home of Redis». Consultado em 23 de junho de 2020 
  3. Redis Labs. «RedisGraphs' Releases». Consultado em 23 de junho de 2020 
  4. Neo4j. «Cypher Query Language». Consultado em 23 de junho de 2020