2.3. Overview of District Achievements during DDP Implementation
2.3.3. Governance Pillar
Os Sistemas Gerenciadores de Bancos de Dados em Grafos (SGBDG) são exemplos de Sistemas NoSQL, os quais modelam e manipulam os dados por meio de vértices e arestas. Esse modelo permite a representação de contextos complexos com grande interconectividade nos dados, destacando os relacionamentos entre as entidades na base de dados (POKORNÝ, 2016).
Na utilização de dados em grafo, existem duas abordagens principais amplamente utilizadas. A primeira consiste em usar nativamente o modelo de grafo nos mecanismos de banco de dados. A segunda utiliza modelos alternativos, principalmente o modelo relacional, para representar um grafo de dados. Essas abordagens são discutidas a seguir (GHRAB et al., 2018):
2.5.1 Abordagem com Grafo Nativo
Nos últimos anos, o desenvolvimento de SGBDG nativo passou a ser uma tendência. A maioria dos SGBDG nativo implementam o modelo de grafo de propriedade ou uma variação dele (GHRAB et al., 2018). Essa abordagem faz com que o modelo de grafo seja implementado tanto no armazenamento físico dos dados, quanto no processamento de consultas. Com isso, aumenta a compatibilidade da consulta com os dados armazenados, tornando as consultas mais intuitivas. Do ponto de vista de desempenho, os SGBDG nativos são otimizados para travessias em grafo. O custo de atravessar uma aresta é constante e o custo de navegação no grafo é menor do que as junções entre as tabelas do modelo relacional.
Os SGBDG nativos, devido ao armazenamento de dados em grafo, permitem tipos específicos de consultas em grafo (ANGLES, 2012), que enumeramos a seguir:
• Consultas adjacentes - o princípio básico é a adjacência vértice / aresta. Dois vértices são adjacentes (ou vizinhos) quando possuem uma aresta entre eles. Da mesma forma, duas arestas são adjacentes quando compartilham o mesmo vértice. Dessa maneira, podemos realizar consultas para validar se dois vértices ou duas arestas são adjacentes, assim como, listar todos os vizinhos de um vértice;
• Consultas de Alcance - este tipo de consultas é caracterizado por problemas de caminho ou de travessia. O problema de alcançabilidade consiste em testar se dois
vértices são conectados por um caminho. Nesse contexto, podemos considerar dois tipos de caminhos: caminhos de comprimento fixo, que contêm um número fixo de vértices e arestas; e caminhos simples regulares, que determinam algumas restrições nos vértices e arestas (por exemplo, expressões regulares);
• Consultas de correspondência de padrões - este tipo de consulta consiste em localizar todos os subgrafos de um grafo de dados que são isomórficos a um dado padrão de grafo; e
• Consultas de sumarização - esse tipo de consulta não está relacionada à estrutura topológica do grafo. Em vez disso, são consultas baseadas em funções especiais que permitem resumir ou computar os valores resultantes da consulta, retornando um único valor. As funções agregadas (por exemplo, avg, count, max ) são exemplos desse tipo de consulta.
Com base nessas formas de consulta, percebemos que os SGBDG não-nativos não conseguem explorar alguns desses algoritmos de consulta, pois o modelo relacional foi projetado para executar varreduras de tabela em vez de travessias, não sendo adequado para lidar com a estrutura topológica do grafo.
2.5.2 Abordagem com Grafo Não-Nativo
Essa abordagem utiliza os recursos do modelo relacional para manipular o grafo de conhecimento, o qual é representado em Resource Description Framework (RDF) (CYGANIAK et al., 2014), uma linguagem recomendada pela World Wide Web Consortium (W3C) para descrever e vincular recursos (GHRAB et al., 2018). Nessa abordagem, os dados do RDF são manipulados em tabelas do modelo relacional utilizando triplas <assunto, predicado, objeto> para registrar as informações.
A cobertura do modelo relacional no mercado beneficiou a disseminação do RDF, possibilitando uma integração suave com uma ampla variedade de plataformas relacionais. No entanto, as implementações de grafo no modelo relacional são deficitárias no cumprimento de requisitos para: (i) a modelagem intuitiva dos dados; (ii) as consultas de reconhecimento topológico do grafo (tais como, recuperação e comparação de caminho, e correspondência de padrões em grafo); e (iii) o desempenho otimizado na travessia do grafo.
Nessa abordagem, o mapeamento da estrutura do grafo para as tabelas do modelo relacional causa problemas de incompatibilidade nos níveis de modelagem e consulta. A
travessia de arestas é simulada usando operações caras de junção, o que promove uma carga de trabalho pesada, especialmente para tabelas altamente interconectadas. Além disso, o SQL não é adequado para realizar consultas sobre a topologia do grafo, tendo limitações para realizar correspondência de padrões, recuperação de caminhos e identificação de dados vizinhos.
2.5.3 SGBDG Neo4j
Neo4j é um SGBDG nativo desenvolvido em Java pela Neotechnology para ser integrado nas aplicações ou ser acessado como cliente / servidor via API REST. A manipulação do grafo no Java Neo4j é muito natural, com o uso de sua API é possível modelar o grafo de dados e adicionar conjuntos de propriedade nos vértices e arestas do grafo (MPINDA et al., 2015).
Esse SGBDG tem como característica o suporte a transações (Atomicidade, Consistência, Isolamento e Durabilidade - ACID) (PANZARINO, 2014), alta disponibilidade e alta velocidade em consultas. Utiliza de forma nativa o modelo grafo de propriedades no armazenamento e processamento dos dados. Além disso, o Neo4j possui versões open- source e comerciais, oferecendo dois tipos de arquitetura: centralizada e distribuída com suporte à replicação (MILLER, 2013).
O Neo4j possui uma linguagem de consulta nativa denominada Cypher, que foi projetada para facilitar o uso dos desenvolvedores. Embora atualmente específica do Neo4j, essa linguagem permite representar os grafos de maneira intuitiva usando diagramas na descrição dos dados em grafo (CELKO, 2014). O Cypher fornece uma sintaxe declarativa que permite consultas de correspondência de padrões. Esta linguagem relativamente simples, mas poderosa, permite facilmente expressar consultas muito complicadas em bancos de dados (MPINDA et al., 2015).