Neo4j – Banco de Dados orientado a Grafos

Se você conhece banco de dados estruturados (SQL Server, ORACLE, PostGree. MySQL, etc.. ), seja bem vindo a um novo paradigma, o Neo4j. O objetivo deste artigo é apresentar de forma simples esta tecnologia.
O Neo4j é um banco de dados Open Source baseado no conceito NoSQL (Banco de Dados que não utiliza os conceitos estruturados).  As informações não são armazenadas em tabelas, mas sim na forma de Grafos e suas estruturas são representadas de forma que o conhecimento é representado pelos conceitos matemáticos da Teoria de Grafos.

A teoria de grafos é uma ferramenta simples, acessível e poderosa para construção de modelos para inúmeros problemas que requerem a construção de sistemas complexos que vão desde o mapeamento de processos industriais, logística, sistemas de comunicação, fluxo de redes, escolha de rotas… e possui ampla aplicação em diversas áreas do conhecimento, tais como, engenharias, computação, genética, física, química, antropologia, linguística, etc.

A ideia de Grafo surgiu independente das diversas áreas de conhecimento, no entanto é considerada como uma área da matemática aplicada. A mais antiga menção sobre o assunto ocorreu no trabalho de Euler (pronuncia-se Óiler), no ano de 1736 para modelar e explicar um problema chamado “Pontes de Königsberg.

Diagrama de Euler

Diagrama de Euler

O problema consistia em verificar se seria possível percorrer todas as sete pontes da cidade passando uma única vez em cada ponte.

Euler verificou (e provou) através de um diagrama associando nós (vértices) e arcos (arestas) que não havia solução para o problema. É justamente este o conceito simples a essência usado pelo Neo4j.

Neste tipo de Banco de Dados, os registros são gravados em vértices (nós) que possuem propriedades definidas conforme a necessidade. Estes vértices por sua vez se relacionam com outros vértices através de arestas (arcos) que se interligam criando caminhos entre os vértices de maneira organizada com relações explicitas.

Para experimentar o Neo4j em seu computador é necessário estar com o JDK instalado (http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html) e baixar a versão conforme o seu Sistema Operacional em http://www.neo4j.org/download. Faça o Download e descompacte em uma pasta.

No caso, criei um diretório chamado “neo4j” no disco C:\neo4j

As informações para a instalação podem ser encontradas em http://docs.neo4j.org/chunked/stable/server-installation.html

A principal fonte de informações sobre este assunto pode ser encontrada em  http://www.neo4j.org/

Considerando que você tenha instalado o Neo4j em seu computador, vou demonstrar o uso do Neo4j usando uma linguagem chamada Gremlin na criação de um Grafo (estou usando o Windows 8). Acione o Prompt de Comando.

prompt

Digite a seguir o seguinte comando.

cd\neo4j\bin

Precione Enter

No subdiretório bin iremos executar a chamada do servidor local. Digite neo4j e pressione Enter

neo4j2

A seguir irão ser carregadas diversas diretivas e serviços que irão instanciar o servidor.

neo4j3

Abra seu Browser e digite a URL http://localhost:7474/

O servidor Web será iniciado e por padrão será usada a porta 7474.

 Servidor neo4j

Há diversas formas de manipular os dados neste servidor. Neo4j Shell, Gremlin, http… Iremos usar a linguagem Gremlin, um outro projeto Open Source que possui uma forma bem simples e amigável de criar Grafos.

Clique em Power Tool Console e em seguida em Gremlin

Gremlin

Para adicionarmos um vértice digite o comando g.addVertex([nome:”Maria”, idade:33]) e pressione Enter.

Os comandos da linguagem sempre iniciam pela letra g.

addVertex informa que queremos adicionar um vértice e os valores nome: e idade: são os parâmetros equivalentes as colunas do nosso banco de dados. “Maria” (entre aspas especifica que é uma cadeia de strings) e 33 (número) são os valores armazenados no vértice.

Crie um outro vértice usando a mesma estrutura.

g.addVertex([nome:”Joana”, idade:16])

Para ver os vértices digite g.V e pressione Enter. Serão listados os vértices existentes.

Para mapear os vértices criados digite g.V.map e pressione Enter. Serão exibidos os atributos dos vértices.

No minha tela foram criados os vértices 26 e 27, pois eu já tinha alguns outros vértices criados.

neo4j6

Agora iremos criar uma aresta entre os dois vértices.

Digite o seguinte comando g.addEdge(g.v(26), g.v(27), ‘conhece’)

g.addEdge cria a aresta entre os vértices g.v(26) e g.v(27) indica o relacionamento e o atributo ‘conhece’ descreve a relação entre os vértices.

Traduzindo seria o mesmo que dizer que Maria conhece Joana.

Para listar as arestas digite o comando g.E

Como resultado teremos a listagem das arestas criadas (no meu caso serão listados todos os relacionamentos).

listagem aresta

Para visualizar de forma gráfica o que fizemos clique na aba Data Browser 

Data Browser

Clique no botão Switch View Mode e apague os dados do campo de busca.

Digite  rels: e o número do vértice no (meu caso 27) e clique no ícone de pesquisa ( a lupa)

rels: 27

Será exibido o relacionamento entre os  vértices 26 e 27  (26 conhece 27).

Desta forma o modelo de Grafo do banco de dados Neo4j começa a ser criado.

Representação gráfica

Antes que alguém me questione “onde usar isso?”. Pare e pense um pouco na era de redes sociais (Face Book, Twitter) que estamos vivendo atualmente. Como podemos perceber, o conceito não é novo, é apenas uma abordagem diferente que nos possibilita criar banco de dados. Há casos (na grande maioria) em que  precisaremos usar a abordagem estruturada. Há muita pesquisa e aos poucos este tipo de tecnologia vai ganhando reconhecimento pela  forma diferenciada de abordar o assunto banco de dados (infelizmente não há ainda publicações em português).

BIBLIOGRAFIA

GERSTING, Judith L. Fundamentos Matemáticos para a  Ciência da Computação 3ª Edição. LTC Editora, Rio de Janeiro

RABUSKE, Marcia Aguiar. Introdução a Teoria de Grafos. Editora da UFSC, Florianópolis

NEO4J. Disponível em  <http://www.neo4j.org>. Acesso em 03 mai. 2013.

GREMLIN. Disponível em <http://gremlin.tinkerpop.com/>. Acesso em 03 mai. 2013.

Comentarios

comentarios