Bancos de Dados Orientados a Grafos Mateus Lana e Thiago Santana
Conteúdo Grafos Definição; Representação; Conceitos. Bancos de dados orientados a grafos Introdução; Representação; Modelagem; Conceitos; Aplicações.
1. Grafos
Definição Um grafo é uma estrutura de abstração muito útil na representação e solução de problemas computacionais, por representarem relações de interdependência entre elementos de um conjunto.
Representação Grafo G = (V,A) Conjunto V com n vértices; Conjunto A com m arestas ou arcos.
Facebook Graph Search
Conceitos A ordem de um grafo é determinada pela quantidade de vértices que ele possui V e o tamanho equivale ao número de arestas do grafo A ; O grau de um vértice é determinado pela quantidade de arestas conectadas ao mesmo e o caminho consiste de uma sequência de vértices conectados por arestas.
Conceitos - Grafo Não Direcionado Ligações expressas em Arestas; Se o vértice v1 está ligado a v2, a recíproca é verdadeira; Cada aresta é representada por um conjunto {v1,v2}, indicando os dois vértices envolvidos.
Conceitos - Grafo Direcionado Ligações expressas em Arcos Cada arco é representada por um par ordenado (v1,v2), indicando os dois vértices envolvidos.
2. GraphDB
Introdução Bancos de dados orientados a grafos são uma de muitas categorias de bancos de dados NoSQL propostas; A grande diferença para o modelo clássico está na representação explícita de relacionamentos entre os dados.
Introdução Os bancos de dados orientados as grafos começaram a ganhar espaço na década de 80 como uma alternativa aos bancos de dados relacionais, para dar suporte aos sistemas que possuem muita interconectividade, porém em decorrência da ascensão dos bancos de dados semi-estruturados (como XML - extensible Markup Language) acabou perdendo espaço.
Introdução Com o surgimento da web semântica e o crescimento e disseminação da utilização das redes sociais também houve o ressurgimento dos bancos de dados orientados a grafos.
Introdução Um exemplo de rede social é o Twitter, na qual sua base de dados é baseada em grafos, onde os usuários são vértices e as ligações entre eles são as arestas.
Representação Nesse tipo de estrutura, os dados são representados por nós, arestas e propriedades. Os nós representam as entidades, as arestas expressam as relações entre os nós e as propriedades apresentam características das entidades e relacionamentos.
Classificações Existem duas classificações para os bancos de dados orientados a grafos definidas conforme o mapeamento lógico-físico: Nativos: Os modelos nativos utilizam a estrutura de grafos no armazenamento físico dos dados e no processamento de consultas; Não-nativos: modelam a parte lógica dos dados como grafos e armazenam os dados através de outros modelos.
Modelagem Há diferentes formas de se modelar um banco de dados, sendo que a mais simples é o modelo simples-relacional, onde todos vértices são do mesmo tipo e as arestas são definidas com o mesmo tipo de relacionamento.
Grafo Simples
Modelagem A modelagem mais utilizada entre os SGBDGs atuais é o grafo de propriedades, na qual vértices e arestas contêm atributos para descrever suas propriedades; Este modelo é definido como um grafo multi-relacional com atributos e arestas direcionadas.
Grafo de propriedades
Manipulação de Dados A manipulação de dados é expressa através de operações orientadas a grafos; Identificar os nós mais próximos em um grafo é a peça-chave em um conjunto diversificado de aplicações. Exemplos: busca e sugestão de amigos em uma rede social, marketing viral na web, busca e análise inteligente de palavras-chave em uma base de dados, dentre outros.
Manipulação de Dados (Contexto) Redes sociais, como o Facebook, apresentam sugestões aos usuários de possíveis amigos até um determinado grau de profundidade, baseando-se nas relações entre os indivíduos da rede; A busca desse tipo de dados em Big Data não se trata de algo simples, pois, para encontrar os amigos de amigos de um usuário, é necessário consultar um grande número de informações no grafo social.
Consultas Há vários tipos de algoritmos que podem ser usados para consulta no banco de dados, alguns deles são: Consultas adjacentes; Consultas de acessibilidade; Consultas de combinação de padrões; Consultas de sumarização.
Consultas adjacentes (Travessia) É a forma mais utilizada, esta é baseada no princípio vértice-aresta, onde vértices adjacentes são ligados por uma aresta, e arestas são adjacentes se compartilham o mesmo vértice; Recuperar a informação a partir de um grafo requer algo que é conhecido como travessia, que envolve o conceito de caminhar ao longo dos vértices do grafo.
Conceitos Importantes Uma diferença importante entre uma travessia e uma consulta SQL é que travessia é uma operação localizada, na qual não há índice de adjacência global; Cada vértice e aresta no grafo armazenam um índice dos objetos conectados a ele, e, dessa maneira, o tamanho do grafo não ocasiona a perda de desempenho em uma travessia.
Manipulação de Dados No modelo de dados orientado a grafos, os usuários do grafo social são os nós e as relações de amizade estabelecidas na rede social são os relacionamentos entre os nós; Ao realizar a travessia, o banco de dados acessa um conjunto destes deslocando-se entre os nós através das arestas formadas pelos seus relacionamentos; Dessa maneira, a travessia só considera os dados necessários para a consulta, sem a necessidade de envolver o repositório inteiro de dados.
Migração Relacional - Modelo de Grafos
Modelo de Grafos (Representação Final)
Vantagens As bases de dados orientadas a grafos processam com eficiência densos conjuntos de dados e o seu design permite a construção de modelos preditivos e análise de correlações e padrões de dados; Este modelo de dados, onde todos os nós estão ligados por relações, permite travessias rápidas entre os vértices ao longo das arestas.
Vantagens Modelo de grafos garante facilidade de se alterar o esquema de dados incluindo novas entidades e relacionamentos sem a necessidade de reestruturar o esquema de dados.
Quando Usar? Dados conectados (redes sociais); Roteamento e Serviços baseados em localização; Mecanismos de recomendação.
Dados Conectados (Redes Sociais) Rede sociais são as que mais podem ser beneficiadas com o uso de banco de dados orientado a grafos; Não se trata apenas de identificar quem é amigo de quem em uma rede social. Um banco orientado a grafos também pode representar outras relações, conhecimentos, etc.
Roteamento e Localização Relações entre entidades podem possuir como propriedade as métricas de distância e localização, podendo ser utilizadas para questões de roteamento e entrega de informação de forma mais efetiva; Por exemplo, pode-se fazer a recomendação de um determinado restaurante ou um ponto de interesse baseado na localização do usuário dentro do grafo.
Mecanismos de Recomendação Como os nós possuem relações entre eles dentro de um sistema, os bancos orientados a grafos são muito úteis para fazer recomendações baseadas nos relacionamentos existentes; Um fato interessante é que a medida que os nós e as relações aumentam de tamanho, o sistema de recomendação se torna ainda mais poderoso. Além disso, pode-se usar essas relações para a detecção de padrões de comportamento dentro do sistema.
Aplicações Diversos outros tipos de sistemas podem ser adequados ao modelo de banco de dados orientado a grafos, como sistemas de compras em lojas virtuais, sistemas que detectam padrões em dados químicos e biológicos, e sistemas que analisam a importância dos sites analisando a quantidade de arestas incidentes em cada um.
GDBs Existentes
Breve Exemplo (Neo4J) A criação de vários nós é feita separando-os com uma vírgula
Breve Exemplo (Neo4J) Ao criar um novo nó com rótulos, você pode adicionar propriedades ao mesmo tempo.
Breve Exemplo (Neo4J) Para criar um relacionamento entre dois nós, primeiro obtemos os dois nós. Quando os nós são carregados, simplesmente criamos um relacionamento entre eles.
Breve Exemplo (Neo4J) A definição de propriedades em relacionamentos é feita de maneira semelhante a como é feito ao criar nós. Observe que os valores podem ser qualquer expressão.
Observação O Neo4j é mais rápido do que o PostgreSQL para consultas envolvendo os relacionamentos entre os dados e serve muito bem para evitar problemas de performance provenientes de muitos JOINs.
Obrigado! Perguntas?