Universidade Regional do Noroeste do
Estado do Rio Grande do Sul – UNIJUI
DCEEng – Departamento de Ciências Exatas e Engenharias
Eliézer Silveira Prigol
Redes Sociais com Banco de Dados Orientado
a Grafos
Ijuí, RS, Brasil
2016
Eliézer Silveira Prigol
Redes Sociais com Banco de Dados Orientado a Grafos
Monografia final de curso de graduação em Ciência da Computação objetivando aprova-ção no componente de Trabalho de Conclusão de Curso. Unijuí – Universidade Regional do Noroeste do Estado do Rio Grande do Sul, DCEEng - Departamento de Ciências Exatas e Engenharias.
Orientador: Msc. Marcos Ronaldo Melo Cavalheiro
Ijuí, RS, Brasil
2016
Eliézer Silveira Prigol
Redes Sociais com Banco de Dados Orientado a Grafos
Monografia final de curso de graduação em Ciência da Computação objetivando aprova-ção no componente de Trabalho de Conclusão de Curso. Unijuí – Universidade Regional do Noroeste do Estado do Rio Grande do Sul, DCEEng - Departamento de Ciências Exatas e Engenharias.
Msc. Marcos Ronaldo Melo Cavalheiro
Orientador
Msc. Romário Lopes Alcântara
Convidado
Ijuí, RS, Brasil
2016
Dedico esta monografia a minha família e amigos que sempre me apoiaram e estiveram do meu lado durante toda esta jornada.
Agradecimentos
Agradeço ao SENHOR Deus por toda a provisão sobre mim e minha família. Agradeço a UNIJUÍ que por meio do Programa de Bolsas de Extensão (PIBEX) me permitiu desenvolver o conhecimento obtido durante o curso e colocá-lo em prática, me concedendo também os conhecimentos necessários para a realização dos estudos utilizados para o desenvolvimento deste trabalho. Aos meus colegas bolsistas que sempre me ajudaram e me inspiraram o conhecimento que recebi para este trabalho.
“A melhor maneira de prever o futuro é inventá-lo.” (Alan Kay)
Resumo
Neste trabalho foi desenvolvido um protótipo de rede social web utilizando banco de dados orientado a grafos tendo em vista que é um sistema que exige uma implementação diferente da tradicional relacional. Também será utilizado banco de dados relacional, com o propósito de comparações ao final para expor a questão da viabilidade e vantagens de um método sobre o outro. Para tal realizou-se um estudo sobre banco de dados em geral, teoria dos grafos, bancos de dados que não utilizam a lógica relacional, bancos de dados orientados a grafos em geral e redes sociais virtuais.
Abstract
This work developed a web social network prototype using database-driven graphs with a view that is a system that requires a different implementation of relational traditional. It will also be used relational database, for the purpose of comparison at the end to expose the issue of viability and advantages of one method over the other. To this end we carried out a study on the database in general, graph theory, databases that do not use the relational logic, databases oriented in general graphs and virtual social networks.
Lista de ilustrações
Figura 1 – Configuração simplificada de um sistema de banco de dados. . . 15
Figura 2 – Exemplo de grafo. . . 18
Figura 3 – Grafo com laços e multigrafo. . . 19
Figura 4 – Grafo desconexo. . . 19
Figura 5 – Grafo direcional. . . 20
Figura 6 – Diagrama da terminologia do Grafo de Propriedades. . . 22
Figura 7 – Topologias básicas de redes sociais. . . 26
Figura 8 – Grafo de uma rede (esquerda) e de um cluster (direita). . . . 26
Figura 9 – Arquitetura MVC (Model View Controller) em camadas. . . 28
Figura 10 – Diagrama UML do Sistema. . . 29
Figura 11 – Tabelas do banco de dados relacional. . . 30
Figura 12 – Grafos do banco de dados orientado a grafos. . . 30
Figura 13 – Página inicial do Sistema. . . 31
Figura 14 – Página com os amigos do Usuário. . . 32
Figura 15 – Página de Grupos. . . 32
Figura 16 – Gráfico com tempo de execução com PostgreSQL. . . 34
Figura 17 – Gráfico com tempo de execução com Neo4j. . . 34
Lista de tabelas
Tabela 1 – SGBDGs e características . . . 23 Tabela 2 – Laços e Interações. . . 25
Lista de abreviaturas e siglas
ACID Atomicidade, Consistência, Isolamento e Durabilidade API Application Programming Interface
BASE Basically Available, Soft-state, Eventually consistent CSS Cascading Style Sheets
DBA Database Administrator HTML HyperText Markup Language MVC Model View Controller
OLTP Online Transaction Processing PHP PHP: Hypertext Preprocessor RAM Random Access Memory
SGBD Sistemas Gerenciadores de Banco de Dados
SGBDG Sistemas Gerenciadores de Banco de Dados em Grafos SGBDR Sistemas Gerenciadores de Banco de Dados Relacionais SQL Structured Query Language
UML Unified Modeling Language XML eXtensible Markup Language
Sumário
1 INTRODUÇÃO . . . 12
2 REFERENCIAL TEÓRICO . . . 14
2.1 Banco de Dados . . . 14
2.1.1 Natureza Autodescritiva do Sistema de Banco de Dados . . . 15
2.1.2 Isolamento entre Programas e Dados e Abstração de Dados . . . 16
2.1.3 Suporte de Visões dos Dados . . . 16
2.1.4 Controle de Concorrência . . . 16
2.2 Usuários de Banco de Dados . . . 16
2.3 Bancos de Dados NoSQL . . . 17
2.4 Teoria dos Grafos . . . 17
2.5 Banco de Dados Orientado a Grafos . . . 20
2.5.1 Alguns exemplos de bancos de dados . . . 22
2.6 Redes Sociais na Internet . . . 24
2.6.1 Atores . . . 24
2.6.2 Interações e laços . . . 24
2.6.3 Topologias de Redes Sociais . . . 25
3 MODELAGEM E IMPLEMENTAÇÃO . . . 27
3.1 Ferramentas Utilizadas . . . 27
3.2 Estrutura do Sistema . . . 27
3.3 Interface Gráfica do Sistema . . . 31
4 COMPARAÇÃO DE PERFORMANCE ENTRE OS BANCOS DE DADOS . . . 33
4.1 Inferências . . . 35
5 CONCLUSÃO . . . 36
12
1 Introdução
É indispensável a utilização de banco de dados em qualquer sistema computacional, pois de acordo com (ELMASRI; NAVATHE, 2005, p. 4) os bancos de dados representam um papel crítico em diversas áreas onde são utilizados meios computacionais.
Cada aplicação tem uma lógica específica para armazenamento e relacionamento entre os dados que a constitui. Determinadas aplicações podem não se adequar com a tradicional lógica dos Sistemas Gerenciadores de Banco de Dados Relacionais (SGBDRs), especialmente para bancos de dados que devem dar suporte a um grande volume de dados, de requisicões e de usuários concorrentes, segundo (PENTEADO et al., 2014).
De acordo com (ROCHA, 2013) inúmeros problemas reais de diversos campos do conhecimento podem ser representados por meio de grafos e que requerem aplicações com uma estrutura de banco de dados específica para melhor estruturação e funcionamento do sistema.
Com avanço da utilização da internet e de dispositivos móveis as redes sociais estão cada vez mais incluídas no cotidiano dos usuários, que através de uma conexão com a internet podem se comunicar com outros usuários ou grupo de usuários localizados geogra-ficamente em diversos locais, mudando assim profundamente as formas de relação entre as pessoas no mundo contemporâneo. Sendo também este o motivo para o desenvolvimento de um protótipo de rede social virtual.
Como a estrutura lógica das redes sociais podem ser melhor representadas em forma de grafos e tendo em vista a dificuldade de se utilizar o modelo relacional de banco de dados em redes sociais, por mais que garanta os atributos ACID (Atomicidade, Consistência, Isolamento e Durabilidade), pode-se pensar em outra alternativa para a implementação, utilizado-se um banco de dados orientado a grafos no sistema que irá constituir a rede social. Pois poderá permitir uma performance melhor em relação a utilização de bancos relacionais, onde haveria muita ambiguidade na relação entre os usuários, deixando também de forma mais natural a estrutura do banco.
Será então criado um protótipo de um sistema de rede social em camadas utilizando-se de técnicas de engenharia de software, com relações entre usuários que permita também a criação de grupos de usuários. Será utilizado um banco de dados orientado a grafos para se comparar com o modelo relacional para se verificar a viabilidade e vantagens um sobre o outro, podendo-se assim decidir qual método utilizar no final.
Será verificado também a viabilidade de implementação deste modelo diferente do tradicional, tanto pela questão do aprendizado quanto pela comparação de performance e
Capítulo 1. Introdução 13
organização dos dados.
Banco de dados orientado a grafos utiliza a implementação de grafos que estão presentes em diversas áreas que compõem a Ciência da Computação, como Teoria da Computação, Linguagens Formais, etc. Implementando esse tipo de banco poderá se explorar melhor esse conteúdo e colocá-lo em prática em um sistema útil.
Através deste trabalho será possível contribuir para o desenvolvimento e andamento de projetos que possam utilizar redes sociais ou também outro tipo de sistema que utilize banco de dados orientado a grafos.
14
2 Referencial Teórico
(ELMASRI; NAVATHE, 2005, p. 4) define que banco de dados e os sistemas de bancos de dados estão atualmente presentes em diversas áreas do cotidiano das pessoas. Diversas atividades como transações financeiras, compra de passagens, reservas em um hotel, consulta bibliográfica em uma biblioteca virtual, compra de produtos através de uma página Web ou a utilização de redes sociais, são exemplos de aplicações tradicionais e específicas de bancos de dados que estão cada vez mais presentes de forma marcante na sociedade.
2.1
Banco de Dados
Banco de dados é uma conjunto de dados que estão relacionados entre si, que podem ser gravados e possuem um significado implícito. Porém o uso da definição de banco de dados é restrita ao fato de que represente aspectos do mundo real, sendo chamado de universo de discurso (UoD). Sendo que as mudanças são refletidas em um banco de dados. Deve ser uma coleção lógica e coerente de dados que possuem um significado (não pode ser uma junção de dados randômicos), sendo alimentado por dados que tendam a um fim específico para um determinado grupo de usuários e aplicações de interesse dos mesmos, de acordo com (ELMASRI; NAVATHE, 2005, p. 4)
Conforme (ELMASRI; NAVATHE, 2005, p. 4), o banco de dados pode ser criado e gerenciado manualmente, ou pode ter esse processo automatizado através da utilização do Sistema Gerenciador de Banco de Dados (SGBD) que é um conjunto de programas que permitem a criação e manutenção do banco. É portanto um software de propósito geral que agiliza os processos de definição, construção, manipulação e compartilhamento de banco de dados entre os usuários e aplicações. Na Figura 1 pode-se visualizar como é configurado o SGBD.
Capítulo 2. Referencial Teórico 15
Figura 1: Configuração simplificada de um sistema de banco de dados.
Fonte: (ELMASRI; NAVATHE, 2005, p. 5)
Para o emprego do banco de dados, de acordo com (ELMASRI; NAVATHE, 2005, p. 7), um único repositório de dados é predefinido, mantido e então acessado por diversos usuários, divergindo da abordagem de processamento de arquivos pelas características abordadas a seguir:
2.1.1
Natureza Autodescritiva do Sistema de Banco de Dados
O SGBD possui um catálogo que possui uma descrição da estrutura e restrições do banco, com informações referentes a cada arquivo, tipo e formato de armazenamento de cada item de dado e várias restrições sobre os dados. Essas informações que descrevem a estrutura do banco de dados primário são chamadas de metadados.
O catálogo é utilizado tanto pelo SGBD quanto pelos usuários do banco que precisam de informações estruturais do banco. Para o SGBD trabalhar com qualquer número de aplicações concorrentes precisa que a definição do banco esteja armazenada no catálogo.
Capítulo 2. Referencial Teórico 16
2.1.2
Isolamento entre Programas e Dados e Abstração de Dados
Diferentemente do processamento de arquivos, o SGBD possui a característica de abstração de dados, escondendo os detalhes de armazenamento e implementação dos usuários, fazendo com que no catálogo seja armazenada a estrutura dos arquivos, separadamente do programa de acesso.
2.1.3
Suporte de Visões dos Dados
Pela questão de que um banco de dados típico possui diversa quantidade de usuários, cada um necessita de uma perspectiva, ou visão diferente do banco. Para tal fim um SGBD multiusuário deve dar suporte à definição de múltiplas visões, sendo possível que cada um tenha uma visão virtual dos dados.
2.1.4
Controle de Concorrência
Para garantir que diversos usuários, ao tentarem atualizar o mesmo dado o façam de forma controlada, o SGBD deve incluir um software para o controle de concorrência. Inclusive deve garantir que as transações concorrentes operem corretamente como no caso das aplicações de processamento de transações on-line (OLTP – online transaction processing), que delimita o acesso à determinado dado somente para um usuário por vez.
Transação é um programa em execução ou processo que inclui acesso ao banco de dados, de forma a isolar uma transação das outras (chama-se isolamento). Sendo que a propriedade de atomicidade define que ou se executa todas operações ou nenhuma.
2.2
Usuários de Banco de Dados
De acordo com (ELMASRI; NAVATHE, 2005, p. 7) muitas pessoas estão envolvidas diretamente no projeto, uso e manutenção de um banco de dados, como os administradores (DBA – database administrator) que são responsáveis por gerenciar o banco, o SGBD e os softwares relacionados. Ele tem o controle de acesso ao banco, coordena e monitora a utilização e aquisição de softwares e hardwares necessários. O DBA também tem responsabilidade sobre problemas de segurança.
Os projetistas, que pertencem à equipe do DBA, interagem com todos os grupos de usuários para levantamento de requisitos, identificação dos dados a serem armazenados, escolha de estruturas, criação de views e aplicação de um projeto. (ELMASRI; NAVATHE, 2005, p. 4).
Segundo (ELMASRI; NAVATHE, 2005, p. 4) o Usuário Final está subdivido em categorias que necessitam realizar transações no banco de dados. Os Usuários Finais Casuais são profissionais com nível de gerência média ou elevada que necessitam de
Capítulo 2. Referencial Teórico 17
relatórios específicos. Os Iniciantes ou Usuários Finais Parametrizáveis são usuários que executam constantes transações predefinidas em software. Os Usuários Final Sofisticados implementam aplicações que atendam a solicitações complexas. Os Usuários Autônomos (stand-alone) possuem um banco de dados pessoal.
Também há um grupo de pessoas responsáveis por questões técnicas que não tem interesse pelo banco de dados, que são os que estão associados ao projeto, desenvolvimento e operação do programa e ambiente do SGBD. (ELMASRI; NAVATHE, 2005, p. 11).
2.3
Bancos de Dados NoSQL
De acordo com (OLIVEIRA; CURA, 2015 apud SADALAGE; FOWLER, 2012) a utilização de bancos de dados NoSQL (que não utilizam o modelo relacional com a linguagem de consulta SQL – Structured Query Language) tem crescido consideravelmente, porém escolher qual tipo de banco utilizar é uma tarefa complexa para os desenvolvedores, pois cada um dos bancos NoSQL utiliza uma lógica específica que funciona bem para determinado modelo de dados.
Cada banco de dados NoSQL segue um padrão específico voltado para uma si-tuação, trazendo assim novas perspectivas, tais como: flexibilidade no modelo de dados, escalabilidade horizontal, novas linguagens de consulta apropriadas aos modelos de dados e diversas interfaces para acesso aos dados. (OLIVEIRA; CURA, 2015).
Os bancos de dados NoSQL não se enquadram totalmente no padrão ACID, por utilizarem as propriedades BASE (Basically Available, Soft-state, Eventually consistent), que não ficam verificando a consistência dos dados a cada transação por questão de eficiência. A responsabilidade para assegurar maior nível de consistência é transferido para a aplicação. (KOLOMICENKO, 2013).
Porém a desvantagem é que determinado banco NoSQL fica restrito ao modelo específico dele, sendo necessário adotar um SGBD específico para cada modelo. Então a solução para um determinado sistema que utilize vários modelos de dados seria um banco de dados Multi Modelo, que integra diversos modelos de bancos de dados NoSQL no mesmo SGBD. (OLIVEIRA; CURA, 2015).
2.4
Teoria dos Grafos
Segundo (SZWARCFITR, 1988, p. 19), a Teoria dos Grafos surgiu em 1736, através do estudo e criação de um algorítimo para o problema da ponte de Königsberg de Euler, que consistia na obtenção de uma caminho entre determinados locais (passando por pontes existentes em duas ilhas) voltando para a região inicial sem passar duas vezes pela mesma ponte. Euler utilizou os grafos para chegar a conclusão de que somente tendo um par de
Capítulo 2. Referencial Teórico 18
pontes em cada região é que se cumpre este propósito. A Teoria foi com o passar do tempo sendo aperfeiçoada por De Morgan (1852), e também por volta de 1930 por Kuratowski, König, Menger, entre outros cientistas.
Grafo é representado por G(V, A), onde V (Vértice) não pode ser vazio. O conjunto
A (Aresta) é formado por pares de V não ordenados. Ficando desta forma (a ∈ A): a = (v, w), onde o v e o w são vértices das extremidades. (SZWARCFITR, 1988, p. 35).
De acordo com (ROCHA, 2013), 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 (v1, ..., vn) conectados por arestas.
Os grafos podem ser representados de forma gráfica, como na Figura 2, onde as arestas são equivalentes a linhas que unem os vértices que por sua vez são representados por pontos ou círculos. Sendo que se utiliza a definição grafo para a sua representação geométrica também para facilitação da exposição. (SZWARCFITR, 1988, p. 35).
Figura 2: Exemplo de grafo.
Fonte: (ROCHA, 2013)
Segundo (SZWARCFITR, 1988, p. 39), a distância entre dois vértices é o menor caminho entre eles d(v, w). Se uma aresta é do tipo a = (v, v) então será chamada de laço, pois as extremidades são formadas por um par idêntico de vértices, como ilustrado na Figura 3.
De acordo com (SZWARCFITR, 1988, p. 37), é possível existir mais de uma aresta entre o mesmo par de vértices, sendo que esta estrutura se chama multigrafo, ilustrado na Figura 3.
Capítulo 2. Referencial Teórico 19
Figura 3: Grafo com laços e multigrafo.
Fonte: (SZWARCFITR, 1988, p. 37)
Um grafo onde existe um caminho entre todas as vértices do G é chamado de conexo, porém se não existe este caminho em um ou mais vértices, será chamado de desconexo, ou ainda totalmente desconexo se não houver nenhuma aresta entre os vértices do grafo. (SZWARCFITR, 1988, p. 38), como ilustrado na Figura 4.
Figura 4: Grafo desconexo.
Fonte: (SZWARCFITR, 1988, p. 38)
Segundo (FURTADO, 1973, p. 2), nos grafos dirigidos há um vértice inicial e outro terminal na aresta (denotando direção). Pode-se atribuir designações ou valores aos vértices e às arestas, como pode ser observado na Figura 5.
Diversas operações podem ser feitas em um grafo, tais como Inserção de algum elemento (aresta ou vértice), a Retirada de algum elemento, a Rotação que é a modificação de uma designação, Fusão e Redesignação que equivale a união de dois vértices e a Inversão que é alteração do sentido das arestas. (FURTADO, 1973, p. 3).
Pode ser feito também operações binárias, as quais são análogas às teorias dos conjuntos, como a União (G1 ∪ G2), a Interseção (G1 ∩ G2) e a Diferença (G1 − G2).
Capítulo 2. Referencial Teórico 20
Figura 5: Grafo direcional.
Fonte: Autor.
A operação de soma (G1 + G2) resulta em um grafo que possuí vértices com
pares ordenados (x, y) com vértices x ∈ G1, y ∈ G2 e quanto às arestas, se (x, x0) ∈ G1 e
(y, y0) ∈ G2então as arestas ((x, y), (x, y0)) e ((x, y), (x0, y)) pertencem a soma. (FURTADO,
1973, p. 2).
O produto (G1× G2) resulta em um grafo que possuí vértices como os da soma e
quanto às arestas, se (x, x0) ∈ G1 e (y, y0) ∈ G2 então as arestas ((x, y), (x0, y0)) pertencem
ao produto. (FURTADO, 1973, p. 2).
A respeito dos subconjuntos dos grafos, tendo em vista um grafo G = (V, A), que
G0 = (V0, A0), se V0 = V e A0 ⊂ A então será um Grafo Parcial de G. Se V0 ⊂ V , e A0 é o
subconjunto de A formado pelas arestas de A cujas extremidades pertencem a V0 então
será um Subgrafo de G. Se V0 ⊂ V e V eA0 é o subconjunto de A formado somente por um
subconjunto das arestas de A que tenha as extremidades em V0 então será um Subgrafo
Parcial de G. (FURTADO, 1973, p. 2).
2.5
Banco de Dados Orientado a Grafos
De acordo com (PENTEADO et al., 2014), apesar da vasta utilização que os Sistemas de Gerenciamento de Bando de Dados Relacionais receberam tanto no meio empresarial quanto acadêmico (por causa de seus inúmeros benefícios), com aplicações mais complexas e específicas, esse modelo pode não ser eficiente e gerar problemas devido a adaptação necessária.
O banco de dados orientado a grafos surgiu 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 acensão dos bancos de dados semi-estruturados (como XML - eXtensible Markup Language) acabou perdendo espaço. (PENTEADO et
al., 2014 apud ANGLES; GUTIERREZ, 2008).
Capítulo 2. Referencial Teórico 21
das redes sociais também houve o ressurgimento dos bancos de dados orientados a grafos. Um exemplo de rede social é o Twitter, onde 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. (PENTEADO et al., 2014 apud LIPTCHINSKY et al., 2013).
Segundo (PENTEADO et al., 2014), o banco de dados orientado a grafos é composto de um multigrafo rotulado e direcionado, onde cada par de vértices pode ser ligado por mais de uma aresta. É eficiente quando o usuário executa filtros complexos em propriedades nas arestas.
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. (PENTEADO et al., 2014).
Há duas formas de implementação de sistemas de banco de dados em grafos quanto ao armazenamento e a consulta, que são os classificados como nativos, que possuem uma lista com as adjacências representada assim: vertice-vertice. Neste caso o Sistemas Gerenciadores de Bancos de Dados em Grafos (SGBDGs) pode armazenar a lista de adjacência em um repositório por meio do modelo chave-valor (vértices como chave e valor como lista de adjacência) de forma física em um disco ou na memória. (PENTEADO et al., 2014).
Existem também os SGBDGs que são classificados como não-nativos, que represen-tam por meio de um modelo relacional desta forma: vertice-aresta-vertice. (PENTEADO et al., 2014).
Tinkerpop é um projeto que inicio-se no ano de 2006 focando-se no desenvolvimento
de estruturas de dados, consultas e linguagens de programação para SGBDGs nativos. (PENTEADO et al., 2014).
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. Segundo (PENTEADO et al., 2014 apud ANGLES, 2012) existem outros quatro tipos de grafos:
• Grafos simples: São compostos por vértices interligadas par a par por arestas; • Hipergrafos: Uma hiper-aresta pode conectar-se com inúmeros vértices.
• Grafos aninhados: Um hiper-vértice também pode ser um grafo.
• Grafos de propriedades: Vértices e arestas com atributos definindo suas propriedades (Modelo mais utilizado), ilustrado na Figura 6.
Capítulo 2. Referencial Teórico 22
Figura 6: Diagrama da terminologia do Grafo de Propriedades.
Fonte: (NEUBAUER, 2010)
De acordo com (PENTEADO et al., 2014 apud ANGLES, 2012), há vários tipos de algoritmos que podem ser usados para consulta no banco de dados, sendo estes:
• Consultas adjacentes: Baseado 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.
• Consultas de acessibilidade: Considera o caminho, verificando se dois vértices estão conectados por um caminho no grafo.
• Consultas de combinações de padrões: Pega o grafo padrão da consulta e pesquisa por subgrafos isomórficos.
• Consultas de sumarização: Permite sumarizar ou operar na saída da consulta.
Gremlin é uma linguagem de travessia desenvolvida pela Tinkerpop que possui
algoritmos com funções específicas que atendem as consultas listadas anteriormente.
2.5.1
Alguns exemplos de bancos de dados
A seguir alguns sistemas de banco de dados que utilizam a lógica de grafos:
• InfiniteGraph: Banco de dados proprietário desenvolvido pela Objectivity no ano de 2010 com a linguagem de programação Java com o core em C++, e possui uma API (Application Programming Interface) em Java. Possui o modelo lógico baseado em grafo de propriedades, com uma arquitetura centralizada ou distribuída e mecanismo de replicação (com consistência eventual). O modelo físico de armazenamento é o orientado a objetos. (PENTEADO et al., 2014).
Capítulo 2. Referencial Teórico 23
• Neo4j: De acordo com (PENTEADO et al., 2014), Desenvolvido pela empresa Neo
Technology em fevereiro de 2010, foi implementado em Java (com versão proprietária
e aberta), possui o modelo de grafos de propriedade. Quanto ao armazenamento físico é baseado em repositórios chave-valor. De acordo com (ROCHA, 2013): "Ele ainda pode ser instalado em um ambiente multiservidor ou pode ser executado embarcado em um programa Java".
• OrientDB: Sistema aberto desenvolvido em Java pela empresa OrienTechnologies no ano de 2011, tendo sua linguagem de consulta baseada em Java, ou Gremlin da
Tinkerpop ou ainda SQL adaptado. O modelo de grafo de propriedade é utilizado,
o mapeamento é baseado lista livre de adjacências e o armazenamento físico com recursos de banco de dados de documentos e orientação a objetos. (PENTEADO et al., 2014).
• Titan: Criado pela empresa Aurelius no ano de 2012, com código aberto feito em Java, a definição dos esquemas das bases e a manipulação dos dados é baseado na linguagem
Gremlin. A modelagem lógica baseada em grafos de propriedades, o mapeamento é
feito com lista de adjacências e utiliza pares chave-valor para armazenar fisicamente os dados atraves de bancos de dados específicos. (PENTEADO et al., 2014).
• Trinity: Segundo (PENTEADO et al., 2014 apud SHAO; WANG; LI, 2013), é um banco de dados proprietário desenvolvido pela Microsoft Research, sendo um banco de dados distribuído com modelagem lógica baseada em grafos direcionados, não-direcionados e hipergrafos. Não tem suporte ao Tinkerpop, sendo que as linguagens de consulta e processamento são baseadas em uma engine sobre a plataforma Trinity, como a Trinity.RDF. O modelo físico adotado é o repositório chave-valor com mapeamento em lista de adjacência. (PENTEADO et al., 2014 apud ZENG et al., 2013).
Na Tabela 1 estão descritos os detalhes dos sistemas de banco de dados abordados: Tabela 1: SGBDGs e características. SGBDG Aberto ou Proprietá-rio Tinkerpop Modelo lógico Linguagem de consulta Modelo físico Memória ou Disco Centralizada ou Distribuída Transação ou Repli-cação
InfiniteGraph proprietário Possui propriedades Gremlin objetos disco ambas ambas
Neo4j ambos Possui propriedades Gremlin, Cypher,
SPARQL chave-valor ambos ambas ambas
OrientDB aberto Possui propriedades Gremlin/SQL documentos ambos ambas ambas
Titan aberto Possui propriedades Gremlin chave-valor ambos ambas ambas
Trinity proprietário – hipergrafos SPARQL chave-valor memoria distribuída ambas
Capítulo 2. Referencial Teórico 24
2.6
Redes Sociais na Internet
A formulação de uma rede é algo peculiar do ser humano que cria vínculo (ligação) com seu semelhante com relações de interesses como amizade, trabalho, etc. Estas relações vão sendo expandidas pela pessoa que vai tomando decisões e rumos na rede. (TOMAÉL; ALCARÁ; CHIARA, 2005).
Segundo (RECUERO, 2009, p. 20), os grafos são uma representação que pode ser usada como metáfora para diversos tipos de sistemas, dentre eles estão as redes sociais, onde os indivíduos estão conectados em rede. Através da teoria dos grafos é possível fazer um estudo sobre propriedades da estrutura e funcionalidade da rede social.
As redes sociais possuem elementos que facilmente se identificam e que permitem a visualização do âmbito da comunicação mediada pelo computador. (RECUERO, 2009, p. 25).
2.6.1
Atores
De acordo com (RECUERO, 2009, p. 25) Um elemento importante é o Ator que pode ser representado como um Vértice, e é responsável pela interação e constituição de ligações sociais, sendo que na internet esta interação é mediada pelo computador (ressaltando que na web esse autor pode ser mantido por várias pessoas, sendo na verdade
uma representação de ator social, como por exemplo um blog).
Estes atores constroem sua identidade e se expressam através da Internet em seus perfis de usuário nas redes sociais, e esse processo de expressão e de identificação é algo que está em permanente construção, permitindo assim que seja bem definidas as expressões. (RECUERO, 2009, p. 28)
2.6.2
Interações e laços
Conforme (RECUERO, 2009, p. 30), entender como se forma os espaços de expressão é importante para poder definir como se dão as conexões entre os vértices desta rede.
As conexões entre os atores da rede é definida pelos laços sociais que são constituídos de interações sociais entre eles (que são facilmente detectadas graças a questão de estarem armazenadas em alguma base de dados). Sendo que as conexões são peça fundamental para estudo das redes sociais. (RECUERO, 2009, p. 30).
De acordo com (RECUERO, 2009, p. 32), as interações entre os atores depende da comunicação e compreensão da mesma pelos usuários da rede. Sendo que a rede social deve dispor de ferramentas específicas que permitam uma boa comunicação, alumas funcionalidades são a comunicação síncrona e assíncrona (como ocorre nos chats).
Capítulo 2. Referencial Teórico 25
Na Interação Mútua o usuário tem maior possibilidade de criatividade nas ações realizadas. Ja na Interação Reativa o usuário segue uma sequência de ações de acordo com suas escolhas, sem poder mudar os detalhes. (RECUERO, 2009, p. 33).
Conforme (RECUERO, 2009, p. 39), os laços sociais são constituídos através de interações e das relações. Os laços associativos dependem de uma interação reativa e um laço dialógico depende de uma interação mútua, como pode ser observado na Tabela 2.
Tabela 2: Laços e Interações.
Tipo de laço Tipo de interação Exemplo
Laço associativo Interação reativa Decidir ser amigo de alguém em uma rede, trocar links de fotos, etc.
Laço dialógico Interação mútua Conversar com al-guém através de um chat, trocar recados em uma rede, etc.
Fonte: (RECUERO, 2009, p. 40)
Laços fortes são caracterizados pelo nível alto de intimidade, proximidade e intenci-onalidade entre as relações. O laço associativo caracteriza-se por ser mais fraco, pelo nível de troca entre os atores. (RECUERO, 2009, p. 41).
Conforme (RECUERO, 2009, p. 41), laços recíprocos são laços simétricos, onde os dois atores possuem (se consideram com) laços fortes. Na forma de grafos a relação entre um ator A e outro B ficariam assim AB, sendo que para o B seria BA, para ser um laço simétrico deve haver equilíbrio entre AB e BA. Os laços multiplexos são constituídos de diversos tipos de relações sociais.
2.6.3
Topologias de Redes Sociais
As topologias básicas para uma rede social são: centralizada, descentralizada e distribuída, como pode ser observado na Figura 7.
De acordo com (RECUERO, 2009, p. 58), como as redes sociais podem conter características de várias topologias destas, por estarem em constante movimento e evolução, segue abaixo novas perspectivas sobre as topologias de Redes:
• Redes Igualitárias: Em uma rede igualitária, cada vértice tem a mesma quantidade de ligações com outros, e a mesma possibilidade de novas conexões.
• Rede Mundos Pequenos: Como em uma rede social todas pessoas estão conectadas umas com as outras em algum nível, pode-se acessar qualquer uma a partir de um ponto. Portando trada da questão de coincidência entre conhecidos.
Capítulo 2. Referencial Teórico 26
Figura 7: Topologias básicas de redes sociais.
Fonte: (BARAN, 1964)
• Redes sem Escalas: Uma rede que possui alguns vértices muito mais conectados que outros, centralizando parte da rede.
Segundo (RECUERO, 2009, p. 135), uma comunidade em uma rede social é identificada como um cluster, ou aglomerado de vértices com maior densidade de conexões incluído na rede completa, como pode-se observar na Figura 8.
Figura 8: Grafo de uma rede (esquerda) e de um cluster (direita).
27
3 Modelagem e Implementação
Para poder colocar em prática os conceitos de redes sociais virtuais, foi desenvolvido um sistema implementando o método relacional e orientado a grafos de banco de dados explanados anteriormente, para se fazer também inferências e testes com os mesmos.
3.1
Ferramentas Utilizadas
O sistema foi desenvolvido para web, com o propósito específico da disponibilização para utilização através da Internet, podendo ser acessado através de um navegador web de um computador ou dispositivo móvel.
As linguagens de marcação e formatação front-end utilizadas foram HTML (Hyper-Text Markup Language) versão 5 e CSS (Cascading Style Sheets) versão 3, sendo utilizado também a biblioteca CSS Bootstrap versão 3.
A linguagem de programação front-end utilizada foi JavaScript versão 1.8.5, junta-mente com a biblioteca JavaScript jQuery versão 3. Para back-end foi utilizada a linguagem de programação orientada a objetos PHP (PHP: Hypertext Preprocessor) versão 5.5.9.
O banco de dados relacional que foi escolhido para o teste foi o PostgreSQL versão 9.5, por razão de ser um banco de dados open sourse de disponibilização gratuita que possui uma vasta utilização no mercado. O banco de dados orientado a grafos escolhido para o teste foi o Neo4j versão 3.0.3, por ser este um banco de dados com a configuração de licença semelhante ao relacional escolhido e estar sendo um banco destacado na utilização deste novo paradigma.
3.2
Estrutura do Sistema
Para este sistema foi escolhida a seguinte arquitetura: MVC (Model View Controller) em camadas, onde o Model será responsável pelas regras de negocio do sistema, o View pela interface gráfica de usuário, que no sistema serão páginas HTML. O Controler é responsável por gerenciar os dados que serão enviados para o Model e View, como pode se observar na Figura 9.
Capítulo 3. Modelagem e Implementação 28
Figura 9: Arquitetura MVC (Model View Controller) em camadas.
Fonte: Autor.
Com esta arquitetura será possível ter um sistema com ótimo reaproveitamento, podendo-se utilizar qualquer tipo de banco de dados ou interface de usuário sem precisar alterar o resto do sistema, sendo que permitirá utilizar páginas web para disponibilização do sistema através da conexão com a internet para qualquer plataforma que tenha um navegador web atualizado.
Na Figura 10 está o diagrama UML (Unified Modeling Language) com a configuração das classes do sistema nas respectivas camadas do mesmo. Sendo que o View é composto por páginas web, scripts JavaScript e PHP com o propósito de apresentação para o usuário. A mesma interface do Model foi utilizada tanto para implementação do banco de dados relacional quanto do orientado a grafos.
Capítulo 3. Modelagem e Implementação 29
Figura 10: Diagrama UML do Sistema.
Fonte: Autor.
As tabelas do banco de dados relacional foram definidas e organizadas de forma a proporcionar uma simulação das ligações necessárias em uma rede social. Para tanto, foi criada uma tabela tb_usuario para serem armazenados os dados do usuário, uma tabela
tb_redesocial que define as ligações (relações) entre os usuários, uma tabela tb_grupo para
armazenamento dos dados do grupo criado e uma tabela tb_componentes_grupo para se armazenar as pessoas que o administrador do grupo incluiu no mesmo. A Figura 11 demonstra quais foram as colunas e definições das tabelas.
Capítulo 3. Modelagem e Implementação 30
Figura 11: Tabelas do banco de dados relacional.
Fonte: Autor.
No banco de dados orientado a grafos foi definido que os usuários são vértices do tipo Usuário tendo como propriedades os dados do usuário, e a relação é feita através de duas arestas (sendo RELACAO o nome do relacionamento), cada uma em direção a um usuário. Os grupos são vértices do tipo Grupo que possuem como propriedades os dados do grupo, bem como o código do administrador armazenado. Para relacionar outros usuários ao grupo é feita uma ligação com uma aresta do usuário escolhido em direção ao vértice do grupo (sendo PARTICIPA o nome da ligação). Segue Figura 12 com uma demostração da rede social feita no banco de dados orientado a grafos Neo4j.
Figura 12: Grafos do banco de dados orientado a grafos.
Capítulo 3. Modelagem e Implementação 31
3.3
Interface Gráfica do Sistema
O sistema possui um layout responsivo (se adapta ao tipo de tela e dispositivo), disponibilizado pelo sistema de grid da biblioteca Bootstrap, justamente para proporcionar melhor usabilidade do mesmo. A página inicial do sistema é a de login que também pode direcionar para a página de cadastro como pode se observar na Figura 13.
Figura 13: Página inicial do Sistema.
Fonte: Autor.
Ao efetuar o login no sistema, o usuário será redirecionado para a página que carrega a rede social (todos os amigos do usuário), contendo a opção de desvincular para cada amigo, como se observa na Figura 14. A opção de pesquisa permite que o usuário encontre outros usuários e adicione-os como amigos pesquisando-se por uma parte da palavra do nome correspondente ao usuário.
Ao clicar na opção Meus Grupos no menu lateral, o usuário será redirecionado para a página que contém os grupos que foram criados por ele e os grupos em que ele pertence bem como a opção de criação de novos grupos e adição de novos usuários em seus grupos, ilustrado na Figura 15.
Capítulo 3. Modelagem e Implementação 32
Figura 14: Página com os amigos do Usuário.
Fonte: Autor.
Figura 15: Página de Grupos.
33
4 Comparação de performance entre os
Ban-cos de Dados
O computador utilizado para o teste possui o processador Intel Core i5 480M, com 8 Gigabytes de memória RAM (Random Access Memory), com o sistema operacional Windows 8 64 bits.
Para eliminação de qualquer interferência nos testes de execução das transações nos bancos de dados, não se utilizou o sistema da rede social ou qualquer tipo de driver para alguma linguagem de programação. Então os testes foram executados diretamente nos bancos de dados através do Shell do sistema operacional.
Para ter um tempo mais preciso foram criadas redes sociais com diversos usuários e diversas ligações e grupos com diversos usuários adicionados (a mesma estrutura para teste nos dois bancos de dados diferentes). Foram repetidos 30 vezes cada teste para se obter um tempo médio, este em Milissegundos.
Os testes escolhidos foram as transações mais comuns de serem feitas em uma rede social, como: Criação de conta de Usuário, Login, Exclusão de Conta, Carregar Rede
Social, Adicionar Amigo, Desvincular Amigo e Carregar Componentes de um Grupo.
No gráfico da Figura 16 que possuí o resultado dos testes utilizando-se o banco de dados relacional PostgreSQL pode-se observar um aumento significativo de tempo nas operações referentes as transações feitas na rede social.
No gráfico da Figura 17 se observa o tempo dos mesmos testes que foram executados no banco de dados orientado a grafos Neo4j, que se demonstrou estável para a maioria das transações na rede social, exceto no carregamento dos componentes do grupo.
Capítulo 4. Comparação de performance entre os Bancos de Dados 34
Figura 16: Gráfico com tempo de execução com PostgreSQL.
Fonte: Autor.
Figura 17: Gráfico com tempo de execução com Neo4j.
Fonte: Autor.
Comparando-se os tempos dos dois testes, observa-se que somente no quesito de carregamento de componentes de um grupo o banco de dados relacional supera o banco de dados orientado a grafos. Para uma visualização detalhada, o gráfico da Figura 18 demonstra uma comparação com os dois testes realizados.
Capítulo 4. Comparação de performance entre os Bancos de Dados 35
Figura 18: Gráfico com comparação dos testes.
Fonte: Autor.
4.1
Inferências
Através dos testes pode-se observar como se comportaram os bancos de dados durante a execução das transações. O banco de dados orientado a grafos demonstrou melhor performance em relação ao banco de dados relacional, ficando atrás somente nos testes de Carregamento de Componentes de Grupo.
Aumentado o tamanho da rede social em escala mundial, cada vez mais é neces-sário se pensar na utilização de um banco de dados que atenda melhor as demandas computacionais impostas sobre a mesma.
36
5 Conclusão
Juntamente com a inclusão digital, as redes sociais virtuais estão cada vez mais presentes na vida e dia-a-dia das pessoas, mudando profundamente o comportamento humano, adaptando novos valores, paradigmas e conceitos para a sociedade. Não somente o usuário está mudando, mas também as tecnologias que proporcionam a interação com o mundo virtual.
Para o usuário desfrutar de uma interação cada vez mais sem limites em um sistema de rede social, as ferramentas, linguagens de programação, plataformas e principalmente os sistemas de bancos de dados devem se adequar aos princípios básicos de uma rede social, para influenciar tanto na facilitação de manutenção desta rede quanto para melhor performance do software.
Os grafos possuem uma atenção privilegiada na Ciência da Computação, pois permitem a definição de redes e procedimentos independentemente de linguagens específicas para se demonstrar a estrutura e funcionamento dos mesmos. É também um modelo utilizado nos bancos de dados orientados a grafos.
Para acompanhar, desfrutar e testar as novas tecnologias este trabalho teve o esforço de fazer uma comparação entre os métodos de banco de dados que podem ser utilizados em um sistema de rede social. Como o modelo relacional está a muitos anos no mercado, é comum que se escolha o mesmo para ser feito uma comparação com a tecnologia definida como mais adequada para utilização.
Os bancos de dados orientados a grafos estão sendo cada vez mais sendo utilizados em redes sociais, pois além de terem uma definição que é compatível com o modelo de rede social virtual, também prometem melhor performance e menos custo computacional. Para tanto o banco de dados orientado a grafos foi escolhido para se fazer o teste.
Para melhor definição de uma rede, foi desenvolvido o protótipo funcional de uma rede social que pode se conectar tanto com um banco de dados relacional quanto com um orientado a grafos. Os testes de execução foram executados diretamente na fonte, nos bancos de dados definidos.
Os testes deixaram claro que na questão de performance em uma rede social, o banco de dados orientado a grafos Neo4j superou o banco de dados relacional PostgreSQL na maioria dos teste (perdendo somente na questão de carregamento de componentes de grupo), sendo então opção promissora para o mercado.
O trabalho contribuiu para deixar bem claro o funcionamento e vantagens da utilização de um banco de dados NoSQL, especificamente o orientado a grafos, algo que
Capítulo 5. Conclusão 37
permitirá também uma escolha diferenciada da tradicional (banco de dados relacional), alterando os paradigmas e conceitos da engenharia e desenvolvimento de software.
Será possível reaproveitar todos os conceitos obtidos através deste trabalho em futuros projetos no meio acadêmico, como em trabalhos que venham utilizar o software estudado, e também fora do meio acadêmico em redes sociais para diversas áreas, como redes sociais voltadas para o público, empresas ou setores específicos. O que foi desenvolvido é também uma contribuição para futuro da sociedade, pois uma rede social virtual interfere diretamente no funcionamento da mesma.
38
Referências
ANGLES, R. A comparison of current graph database models. ICDE Workshops, p. 171–177, 2012. Citado 2 vezes nas páginas 21 e 22.
ANGLES, R.; GUTIERREZ, C. Survey of graph database models. ACM Comput. Surv, 2008. Citado na página 20.
BARAN, P. On distributed communications networks. Communications Systems, IEEE
Transactions on, IEEE, v. 12, n. 1, p. 1–9, 1964. Citado na página 26.
ELMASRI, R.; NAVATHE, S. Sistemas de banco de dados, 4a Edição. [S.l.]: ADDISON WESLEY BRA, 2005. Citado 5 vezes nas páginas 12, 14, 15, 16 e 17.
FURTADO, A. L. Teoria dos grafos: algoritmos. Rio de Janeiro: Editora da Universidade de São Paulo, 1973. Citado 2 vezes nas páginas 19 e 20.
KOLOMICENKO, V. Analysis and Experimental Comparison of Graph Databases. Dissertação (Mestrado) — Charles University in Prague - Faculty of Mathematics and Physics, 2013. Citado na página 17.
LIPTCHINSKY, V. et al. Expressive languages for selecting groups from graph-structured data. Proceedings of the 22Nd International Conference on World Wide Web, 2013. Citado na página 21.
NEUBAUER, P. Graph Databases, NOSQL and Neo4j. 2010. <https://www.infoq.com/ articles/graph-nosql-neo4j>. Acesso em 18 mar. 2016. Citado na página 22.
OLIVEIRA, F. R.; CURA, L. M. del V. Avaliação do desempenho de gerenciadores de bancos de dados multi modelo em aplicações com persistência poliglota. 2015. Citado na página 17.
PENTEADO, R. R. et al. Um estudo sobre bancos de dados em grafos nativos. 2014. Citado 5 vezes nas páginas 12, 20, 21, 22 e 23.
RECUERO, R. Redes sociais na internet. Porto Alegre: Editora Meridional, 2009. Citado 3 vezes nas páginas 24, 25 e 26.
ROCHA, R. R. Algoritmos de Particionamento e Banco de Dados Orientado a Grafos. Dissertação (Mestrado) — Universidade Federal De Itajubá, 2013. Citado 3 vezes nas páginas 12, 18 e 23.
SADALAGE, P. J.; FOWLER, M. NoSQL distilled: a brief guide to the emerging world of
polyglot persistence. [S.l.]: Pearson Education, 2012. Citado na página 17.
SHAO, B.; WANG, H.; LI, Y. In sigmod international conference on management of data.
The Trinity Graph Engine, 2013. Citado na página 23.
SZWARCFITR, J. L. Grafos e algoritmos computacionais, 2a Edição. Rio de Janeiro: Editora Campus, 1988. Citado 3 vezes nas páginas 17, 18 e 19.
Referências 39
TOMAÉL, M. I.; ALCARÁ, A. R.; CHIARA, I. G. D. Das redes sociais à inovação.
Ciência da informação, Brasília, SciELO Brasil, v. 34, n. 2, p. 93–104, 2005. Citado na
página 24.
ZENG, K. et al. A distributed graph engine for web scale rdf data. VLDB Endowment, 2013. Citado na página 23.