Armazenamento e Recuperação de Conteúdo Informacional com Neo4J

Caio Cézar Rodrigues Araujo de Souza1, Cesar Augusto Cusin1  

1Faculdade Paraíso do Ceará (FAP)
Rua da Conceição, 1228 – Juazeiro do Norte – CE - Brasil

Abstract: With the exponential growth in technological demand, we have to work on technologies that meet the desire for efficiency and effectiveness in the storage and subsequent retrieval of information content. In the present work will be discussed a call Neo4J method, which is based on a theory called Leonhard Euler graph theory. The need for a minimum response time by an information system on all business levels is commonplace. In response to this demand, this work intends to research and guide to this new method of data processing.

Keywords: Neo4J. Graph Theory. Database.

Resumo: Com a demanda tecnológica em crescimento exponencial, tem-se que trabalhar em tecnologias que atendam o anseio por eficiência e eficácia no armazenamento e posterior recuperação do conteúdo informacional. No presente trabalho será abordado um método chamado Neo4J, que se baseia em uma teoria de Leonhard Euler chamada teoria de grafos. A necessidade de um tempo mínimo de resposta por parte de um sistema de informação em todos os níveis empresariais é corriqueiro. Em resposta a essa demanda, o presente trabalho pretende pesquisar e orientar para esse novo método de tratamento de dados.

Palavras-chave: Neo4J. Teoria de Grafos. Banco de Dados.

1 Introdução

Atualmente, novas tecnologias são lançadas a todo o momento, são criadas em meses e esquecidas em poucos dias, existem conservadores que se utilizam de ferramentas, métodos e teorias consolidadas que mesmo assim mostram resultado, claro não desmerecendo as novas tecnologias. Dentro desse contexto está a Tecnologia da Informação (TI) com suas diversas de áreas de aplicação, desde uma pequena fazenda até uma grande corporação. Existem informações esperando para serem coletadas, processadas e expostas por tais ferramentas, métodos e teorias. Mas há um problema, com a popularização da tecnologia, os dados estão ficando cada vez mais volumosos, aumentando a complexidade de serem manipulados perdendo tempo de processamento e até mesmo os próprios dados em alguns casos, isso está sobrecarregando o modelo de bancos relacionais.

            No presente trabalho apresenta um estudo sobre uma ferramenta especifica para manipulação de dados, o Neo4j, o mesmo é baseado no modelo matemático da teoria de grafos de Leonhard Euler. Grafos são utilizados não só na matemática, mas também na biologia, física, química, economia e política, também nas mídias sociais, família, amigos, trabalho, comunidades. Os grafos se aplicam bem em Business Inteligence (BI), sistemas de gerenciamento, Social Computing, etc. (IGNATOWICZ, 2011) O Neo4j é uma tecnologia Not Only Structured Query Language (NoSQL) que consiste em uma base de dados baseada em grafos, ou seja, um banco de dados com nós, vértices e arestas. A Figura 1 traz representação gráfica dos bancos de dados relacional (a esquerda) e o banco de dados baseado em grafos (a direita).

 

Figura 1 – Banco de Dados Relacional e Banco de Dados Baseados em Grafos

Fonte – Adaptado de FONSECA, 2013.

1.1 Definição do Problema

A frequência com que os bancos de dados crescem é a mesma das tecnologias e seus novos tipos de arquivos, maiores e mais complexos, o Google, o gigante das buscas tem um processo diário que ultrapassa a marca de 24 petabytes (HAMANN, 2011), no topo dessa lista está World Data Centre for Climate (WDCC) que é do segmento de processamento de dados climáticos realizado em todo mundo, o banco de dados do centro mundial de dados sobre o clima conta com gigantescos 220 peta bytes (TAURION, 2007). A consulta em um banco de dados relacional com essa dimensão demoraria horas ou até mesmo dias. Como todas essas empresas e organizações não disponibilizam o real tamanho de sua base de dados, todas essas informações são dados aproximados.

            Existe atualmente vários tipos de bancos de dados, mesmo os que possuem o menor tamanho arquivos está sujeito a certo declínio em determinada consulta efetuada pelo usuário, as empresas estão mais exigentes com relação a software, a necessidade de um método de desenvolvimento de banco de dados mais eficaz e eficiente para pequenas, medias e grandes empresas é inevitável. Gigantes da tecnologia citadas anteriormente já usam algum tipo diferenciado de manipulação dos dados, por exemplo, o Google usa uma tecnologia chamado NoSQL, método bem diferente do tradicional banco relacional.

1.2 Justificativa

O Neo4J é baseado na teoria de grafos, teoria essa empregada pela primeira vez na Alemanha em 1736 pelo suíço matemático Leonhard Euler que logo depois aplicou sua teoria na parábola das pontes de Königsberg, onde o desafio consistia em ir de um lado para o outro da cidade atravessando todas as 7 pontes passando uma única vez por cada ponte (Figura 2).

 

Figura 2: Parábola das Pontes de Königsberg.

Fonte: ARAÚJO, 2014.

            Pelo fato de ser uma tecnologia que preza pela eficácia e eficiência e ainda ser relativamente nova, o Neo4J é solução metodológica ainda pouco utilizada, porém, tem uma teoria por trás muito mais antiga do que o próprio banco relacional, isso pode ser usado como argumento na implantação de tal tecnologia em uma empresa que atêm apenas ao banco convencional, consultas em Structured Query Language (SQL) imensas e tempo de resposta curto.

            Dado o fato que os bancos de dados só crescem, e atualmente, crescem exponencialmente, justificam-se esforços e pesquisas acerca de se manter e melhorar desempenho diante deste cenário.

2 Hipótese

O Neo4j pode ser apontada como a melhor solução para se trabalhar com banco de dados ao invés do banco relacional. O mesmo mostra sua vantagem em números como tempo, representados por sua alta performance e a quantidade de informações processadas, apontando em quais áreas se adequa respectivamente e o que muda com relação ao modelo relacional. E por fim a facilidade de modelar em grafos, ou seja, trabalhar com o Neo4J. Este artigo não visa puramente o desenvolvimento da ferramenta Neo4J, a intenção é voltar o leitor para o potencial da ferramenta citada, o objetivo é conduzir o leitor a dar uma atenção melhor à ferramenta, apontado suas vantagens e desvantagens com relação ao banco relacional, e ao final do artigo o mesmo enxergar que o Neo4J, é sim, uma boa ferramenta.

3 Objetivos

3.1 Objetivo Geral

Apresentar o Neo4J como ferramenta importante para o desenvolvimento e manipulação de banco de dados, visando salientar a eficiência e a eficácia do mesmo.

3.2 Objetivos Específicos

  •   Apresentar de forma sucinta e coerente o Neo4J;
  •  Elaborar um embasamento histórico, apresentando teorias em que o método foi inspirado;
  •  Expor vantagens e desvantagens, entre método relacional tradicional e o Neo4J;
  •  Demonstrar teoricamente os resultados obtidos, através de pesquisas e estudos com aplicações que utilizem o mesmo;
  •  Obter um resultado satisfatório e incontestável;

4 Levantamento Bibliográfico

4.1 Banco de Dados Relacional

O banco de dados relacional consiste de um conjunto de tabelas que contém algum relacionamento contendo colunas que são os atributos e as linhas que são as tuplas, esses relacionamentos são possíveis por causa da noção de Primary Key (Chave Primária). A chave primária funciona como um identificador da tabela, assim podendo se relacionar com as demais tabelas do banco de dados.  A Figura 3 apresenta um exemplo simples de relacionamento entre tabelas, onde a chave primaria de cliente está relacionada com a tabela locações e chave primaria de título está relacionada também com a tabela locações.

 

Figura 3: Vida e Trabalho.

Fonte: Leônidas, 2009.

   A imagem da figura 3 mostra um simples banco de dados implementado pela Front End Workbench do Sistema de Gerenciamento de Banco de Dados (SGBD) MySQL. O MySQL surgiu a partir da necessidade da equipe que criou o SGBD, de utilizar algum mecanismo que permitisse a conexão de tabelas criadas na linguagem SQL para um determinado fim (SANTOS; SILVA, 2014). O MySQL é um dos SGBD’s mais utilizados em tudo mundo, e a licença é grátis para utilização não comercial.

Há três tipos de relacionamentos no banco relacional: o um para um (1:1); um para muitos (1:n) e o muitos para muitos (n:n). No exemplo da Figura 4, está descrito que um carro possui um volante e um volante contém em um carro.

 

Figura 4: Exemplo de Relacionamento de 1:1.

A Figura 5, apresenta o exemplo de 1:n, ou seja, de um para muitos onde um carro possui uma montadora e uma montadora possui vários carros.

 

Figura 5: Relacionamento de 1:n.

Por último o relacionamento n:n na Figura 6, um carro pode conter vários motoristas e um motorista pode possuir vários carros. Esse exemplo pode ser aplicado no banco de dados de uma empresa logística.

 

Figura 6: Relacionamento n:n.

Estes são exemplos simples de relacionamento entre tabelas de dados, em um conjunto de dados organizados, esse tipo de banco de dados relacional é baseado na teoria de conjuntos de Georg Cantor iniciado os estudos em 1870.

4.2       Teoria de Grafos

A teoria de grafos nasceu graças a curiosidade do matemático suíço Leonhard Euler que na época residia em uma pequena cidade da Prússia chamada Königsberg, a mesma era cortada pelo Rio Pregel, em meio ao rio existem duas ilhas interligadas à costa por sete pontes que foram construídas em função das dificuldades que os moradores tinham em transportar cargas e se deslocarem, Euler então resolveu desvendar uma forma de ultrapassar todas as 7 pontes de maneira que cada uma das 7 fossem atravessadas uma única vez (COSTA, 2011). Então ele transformou cada área de terra em pontos, ou seja 4 vértices, e cada ponte seriam as arestas do diagrama, e assim foi criado o primeiro diagrama de grafos. Como descrito abaixo na Figura 7 é impossível fazer o trajeto ultrapassando todos os pontos uma única vez sem que atravesse uma ponte mais de uma vez.

 

Figura 7: Primeiro Digrama da Teoria de Grafos.

Fonte: CARDOSO, 2010.

4.3 Neo4J

O Neo4J é um banco de dados baseado no NoSQL totalmente Open Source, diferente do banco dados convencional onde as informações são armazenadas em tabelas o Neo4J armazena suas informações em Grafos, que é vinculado ao conceito matemático de Euler, a Teoria de Grafos. Pode-se aplicar Grafos a tudo, desde a ciência genética a engenharia, física, química e a computação. O modelo de grafos é representado por nós (vértices) e arestas (relacionamento entre nós), nas arestas atribui-se as propriedades de relacionamento entre cada nó, Conforme representado na Figura 8.

 

Figura 8: Nós com Relacionamento entre nós com propriedades.

Fonte: VP-UML, 2014.

            O modelo de grafos é percorrido por métodos específicos do Neo4J, são eles:

  • Traversal que percorre um grafo identificando os caminhos e localizando os dados;
  • Index Mapeia os relacionamentos sinalizando os pontos de início para o Traversal.

            A manipulação de dados dentro do Neo4J é feita de diversas formas, algumas delas são, Cypher, Gremlin, Lucene, Rest, entre outras. É correto afirmar que é necessário averiguar cada situação para que seja possível a escolha da ferramenta ideal para cada função. Comparando com o banco de dados relacional, o Neo4J se sai melhor no tratamento de informação, por exemplo, um banco de dados relacional é incontestável na hora de realizar a média de vendas de um representante dentro de uma empresa, já o banco de dados gráfico é melhor para responder qual representante é mais simpático dentre os outros (ANTUNES, 2012).

            Quando é citado que pode-se utilizar Grafos para tudo, significa tudo mesmo, a Figura 8 mostra a representação em modelo de grafos de relacionamento do filme Matrix do ano 1999.

 

Figura 8: Relacionamento representado por grafos entre personagens do filme.

Fonte: PACHECO, 2012.

5 Desenvolvimento

5.1 Modelagem e Codificação

5.1.1 Neo4J

Como proposto incialmente, seria feito testes comparativos entre o Neo4J Banco de Dados Baseado em Grafos e um Banco de Dados Relacional, o SGBD escolhido foi o MySQL, foram feitos diversos testes com ambos os bancos de dados, Neo4J e MySQL respectivamente. Primeiro foram feitos testes com o Neo4J, primeiramente a instalação do mesmo é simples, rápida e descomplicada. O Neo4J conta ainda com um manual completo e fácil de utilizar. A seguir, na Figura 9, o código em Cypher para criação dos nós.

 

Figura 9: Código em Cypher para criar nós do grafo.

            Em seguida (FIGURA 10) o código para criação de um relacionamento entre nós, em um relacionamento pode ser atribuído um nome para identificar que espécie de relacionamento se trata.

 

Figura 10: Criando relacionamentos.

            A codificação do Neo4J em Cypher é bastante simples e fácil de aprender, a interface é limpa e bem intuitiva, e ainda dá suporte à visualização dos próprios grafos podendo-se movimenta-los para qualquer lado, de modo que o usuário possa personalizar sua visualização dos mesmos para melhor leitura. A Figura 11 mostra o exemplo de grafo gerado pelo Neo4J a partir da codificação em Cypher.

 

Figura 11: Gráfico “Família” criado pelo Neo4J.

5.1.2 MySQL

            No modelo relacional MySQL o processo é o mesmo, a partir de uma codificação é possível criar um modelo gráfico, modelo esse que ajuda bastante na visualização do usuário para um bom entendimento do funcionamento do banco.

Figura 12: Código para criação das tabelas mãe e filho em MySQL.

            Na figura anterior (FIGURA 12) encontra-se um exemplo de código em MySQL para criar um banco de dados para um relacionamento familiar, como descrito no início deste trabalho, no modelo relacional a tarefa de criar, por exemplo, um banco com relacionamento interfamiliar, entre amigos em comum, dentre outros e bem mais complexa simplesmente pelo fato de que o banco de dados relacional tem um Schema fixo, como mostra a Figura 13, o que dificulta trabalhar com esses tipos de relacionamentos.

Figura 13: Modelo relacional em MySQL banco de dados “Família”.

5.2 Consultas

Com as consultas não foi diferente, bem mais simples do que o MySQL, o Neo4J se sai melhor também nas consultas, seja na facilidade da escrita ou na economia de comandos. Na Figura 14 ver-se-á um exemplo de consulta com Cypher no Neo4J, usando como exemplo o banco “Família” apresentado anteriormente na Figura 11.

Figura 14: Consulta em Cypher para descobrir quem são os pais do nó      “Caio Cezar”.

            A seguir (FIGURA 15) tem-se o mesmo exemplo de consulta com o MySQL, exemplifica-se o comando para descobrir quem são os pais da tupla “Filho” representada de nome Caio.

Figura 15: Consulta em MySQL elaborado no Front end WorkBench.

            Nas consultas assim como nas próprias construções dos bancos, é necessário analisar qual é a melhor ferramenta para cada necessidade, assim como o Neo4J é uma boa escolha para soluções de Sistemas de recomendações por exemplo, o MySQL tem suas vantagens em outras áreas e aplicações.

5.3 Inserções

Nas inserções de dados os dois bancos de dados foram submetidos a um número específico de 3900 nós (Neo4J) e 3900 tuplas (MySQL) para avalição. O que foi abordado nessa avaliação como crucial foi o tempo que cada um levou para inserir os dados em um só comando. No Neo4J foram inseridos 3800 e 3900 nós respectivamente em menos de 11 segundos, mais precisamente 9149 e 10164 milissegundos respectivos, esses foram os tempos de execução das query’s, como representando na Figura 16.

Figura 16: Tempo de execução da query em Cypher.

            No MySQL as inserções foram implementadas através da Front end Workbench, 3900 tuplas foram adicionadas ao banco em um único insert dando início às 14:00:56 e o termino as 14:03:17 como descrito nas respectivas Figuras 17 e 18.

Figura 17: Início da execução do insert.

            O MySQL Workbench não contabiliza o tempo total de execução das 3900 tuplas, contabilizando individualmente cada tupla, o tempo total dessa execução foi de 2 minutos e 21 segundos, lembrando que o MySQL leva em consideração o hardware em que se encontra o banco de dados.

Figura 18: Termino do tempo de execução do insert.

            O ganho em tempo do Neo4J com relação ao MySQL, foi de aproximadamente de 130 segundos, fato que mostra que o Neo4J executa a mesma tarefa com menos de 10% do tempo do MySQL, um ganho de 92,88% conforme gráfico a seguir na Figura 19.

Figura 19: Gráfico demonstrativo do tempo de execução dos insert’s.

            O computador utilizado para ambos os testes é da linha pessoal, ou seja, ausência de servidores, a configuração da máquina segue:

  • Processador Intel® Core™ i5 2.5 GHz;
  • Memória RAM DDR3 6GB;
  • Armazenamento Disco Rígido de 1TB, SATA (5400 RPM);
  • Placa de vídeo NVIDIA® GeForce® GT 630M com memória dedicada de 2GB;
  • Windows 8 Pro 64-bit;
  • MySQL Workbench versão 6.0.8.11354;
  • Neo4J Community 2.0.2;
  • WampServer versão 2.4;

            O Neo4J se mostrou uma boa ferramenta durante o desenvolvimento desse trabalho, entretanto, deve ser estudado qual melhor ferramenta atenda determinada situação. Em comparação ao MySQL o Neo4J se saiu bem nas modelagens, por sua facilidade de escrita, compreensão e visualização gráfica, foi bastante simples nas consultas com os relacionamentos, e por último na inserção e manipulação de um volume relativamente grande de dados.    

6 Resultados

O presente trabalho tinha como objetivo despertar ao usuário que utiliza banco de dados relacional o interesse em novas ferramentas, e a ferramenta citada no artigo foi o banco de dados de grafos Neo4J, que ao decorrer da escrita se mostrou um banco de dados embora jovem, bastante maduro, confiável, rápido, simples e intuitivo. O Neo4J pode ser usado em sistemas como o de recomendações, redes sociais, medir a influência de um usuário e partir de outros usuários, sistemas de segurança através do reconhecimento facial, biometria entre outros.

            Uma escolha eficiente, assim pode ser definido o Neo4J. O resultado do comparativo entre as duas ferramentas, principalmente nas inserções, ficou evidente a superioridade da ferramenta hora apresentada. Nos testes a que foi submetida, fato que faz despertar o interesse do usuário a pesquisar e se aprofundar sobre novos métodos e ferramentas.

7 Conclusão

Ao fim deste artigo, conclui-se que, o Neo4J é uma ferramenta a ser explorada e nunca menosprezada, e que não se tenha receios de utiliza-la. Uma ferramenta inovadora, fácil e rápida, ou seja, atenta a novos desafios seja no âmbito acadêmico ou comercial, contudo, o Neo4J atende a proposta, com o crescimento dos dados ao redor do mundo, o desempenho em consultas e inserções em banco de dados é cada vez mais o principal foco das grandes empresas do setor de tecnologia. As grandes companhias não são o grande foco deste artigo, mas, pode ser, assim como o pequeno usuário as grandes empresas ficam reféns das soluções mais tradicionais e o presente trabalho conclui que é possível mudar esse cenário.

            Com o Neo4J é rápido modelar, fácil implementar, prático de manusear e bastante fácil de instalar. Vale lembrar mais uma vez que o Neo4J é uma ferramenta Open Source, dispõe de documentação vasta, uma comunidade gigante de desenvolvedores e inúmeros fóruns, tudo isso em só lugar, no portal da comunidade Neo4J.

8 Referências

ALECRIM, Emerson. Os maiores bancos de dados do mundo, 2007. Disponível em: <http://www.infowester.com/blog/os-maiores-bancos-de-dados-do-mundo/>. Acesso em: 28 fev. 2014.

ALMEIDA, Adriano. Trabalhando com Relacionamentos: bancos de dados baseados em grafos e o Neo4j. 2011. Disponível em:<http://blog.caelum.com.br/trabalhando-com-relacionamentos-bancos-de-dados-baseados-em-grafos-e-o-neo4j/>. Acesso em: 10 fev. 2014.

ARAÚJO, Adérito. As Pontes de Königsberg. Disponível em: <http://www.mat.uc.pt/~alma/escolas/pontes/>. Acesso em: 30 fev. 2014.

BRANDÃO, Humberto. Teoria dos Grafos Um pouco de história.... Disponível em: http://homepages.dcc.ufmg.br/~humberto/unifal/aulas/grafos/aula_01_Introducao.pdf>. Acesso em: 18 mar. 2014.

COSTA, Elisângela Rocha da. Bancos de dados relacionais, 2011. Disponível em: <http://www.fatecsp.br/dti/tcc/tcc0025.pdf>. Acesso em: 02 mar. 2014.

COSTA, Polyanna Possani da. Teoria de Grafos e suas Aplicações, 2011. Disponível em: <http://www.rc.unesp.br/tmelo/diss-polyanna.pdf>. Acesso em: 30 fev. 2014.

DEVMEDIA. Bancos de Dados Relacionais - Artigo Revista SQL Magazine 86, Disponível em: <http://www.devmedia.com.br/bancos-de-dados-relacionais-artigo-revista-sql-magazine-86/20401>. Acesso em: 02 mar. 2014.

EXPLICATORIUM. Leonhard Euler(1707-1783). Disponível em: <http://www.explicatorium.com/biografias/Biografia_Leonhard_Paul_Euler.php>. Acesso em: 30 fev. 2014.

FONSECA, Adriane De Martini; CAMOLESI, Luiz Jr. Evolução de Metadados de Modelos de Bancos. Disponível em: <http://www.ceset.unicamp.br/sites/default/files/Adriane_0.pdf >. Acesso em: 26 fev. 2014.

FORUM.IMASTERS. Modelagem sistema de cadastro de clientes, 2012. Disponível em: <http://forum.imasters.com.br/topic/459845-modelagem-sistema-de-cadastro-de-clientes/>. Acesso em: 08 mar. 2014.

HOLANDA, Bruno. Teoria dos Grafos, 2011. Disponível em: <http://www.obm.org.br/export/sites/default/semana_olimpica/docs/2011/Nivel1_grafos_bruno.pdf>. Acesso em: 15 mar. 2014.

HUNGER, Michael. Neo4j – Base de dados NoSQL baseada em Java, 2010. Disponível em < http://www.infoq.com/br/news/2010/03/neo4j-10 >. Acesso em: 18 fev. 2014.

IGNATOWICZ, Eder. Neo4 o que? Uma visão prática do banco de dados orientado a grafos, 2012. Disponível em < http://www.infoq.com/br/presentations/neo4j-grafos >. Acesso em: 02 fev. 2014.

IVARSSON, Tobias. Graph Databases and Neo4j, 2010. Disponível em: <http://pt.slideshare.net/thobe/nosqleu-graph-databases-and-neo4j >. Acesso em: 22 fev. 2014.

LEONIDAS. J. P. Tutorial MySql: Parte 1, 2009. Disponível em: <http://www.fatecsp.br/dti/tcc/tcc0025.pdf>. Acesso em: 04 mar. 2014.

NEO4J. Banco de Dados orientado a Grafos. Disponível em: <http://www.tiselvagem.com.br/artigos-cientificos/neo4j-banco-de-dados-orientado-a-grafos/>. Acesso em: 20 fev. 2014.

NEO4J. Primeiros Passos, 2012. Disponível em: <http://www.pognao.com.br/2012/07/neo4j-primeiros-passos.html>. Acesso em: 20 fev. 2014.

NEO4J. The World’s Leading Graph Database. Disponível em: <http://www.neo4j.org/>. Acesso em: 06 fev. 2014.

PACHECO, Diego. Diversão com Neo4J e Jruby, 2012. Disponível em: < http://imasters.com.br/artigo/23554/banco-de-dados/diversao-com-neo4j-e-jruby/>. Acesso em: 15 fev. 2014.

RICARTE, Ivan Luiz Marques. Banco de dados relacionais. Disponível em: <http://www.dca.fee.unicamp.br/cursos/PooJava/javadb/bdrel.html>. Acesso em: 02 mar. 2014.

SANTOS, Jonis Nogueira dos; SILVA, José Adelar Souza da. SGBD MySQL. Disponível em: <https://fit.faccat.br/~jonis/Artigo_mySQL.pdf>. Acesso em: 04 mar. 2014.

TAURION, Cezar. Mundo cada vez mais digitalizado.... Disponível em: <https://www.ibm.com/developerworks/community/blogs/ctaurion/entry/mundo_cada_vez_mais_digitalizado?lang=en>. Acesso em: 20 mar. 2014.

UNICAMP. Leonhard Euler. Disponível em: <http://www.ime.unicamp.br/~calculo/ambientedeensino/modulos/history/euler/euler.html>. Acesso em: 10 fev. 2014.