3 de jul de 2012

Neo4J Primeiros Passos

Este post é destinado a apresentação de um banco de dados NoSQL que utiliza grafo como forma de representação dos dados. O banco Neo4j consiste em uma poderosa ferramenta que pode auxiliar na resolução de vários problemas do dia-a-dia.
Creio que o primeiro passo para entender o funcionamento deste banco de dados é entender como funciona um grafo.

Um  grafo nada mais é do que um conjunto de vértices e arestas, interligados, ou não. As arestas representam as ligações, ou no caso do banco de dados os relacionamentos, e os vértices os proprios dados.

No neo4j os nodes são representados por hashmaps, contendo chave-valor, e as arestas também podem conter atributos, porém ligam dois nodes.

Antes de tudo é necessário baixar o Neo4j que pode ser encontrado gratuitamente no site do produto, é importante lembrar que ele gira em torno de licenças de código aberto.

Agora me sinto na obrigação de fazer uma pequena propaganda a favor dele rsrs. O Neo4j é um banco de dados com a implementação em Java que possui grande facilidade de criação de projetos, e facilidade de torná-lo distribuído, sua documentação tem bastante coisa. As duas principais formas de acesso a este banco são através de uma conexão manual e utilizando a biblioteca disponibilizada por eles, ou utilizando rest que também existe várias APIs que encapsulam isto.


Vamos começar com algo bem simples, que é a criação de um projeto que acessa o banco de dados e cria um nó.

Depois de baixado, a versão 1.8 para linux/Mac ou Windows, faça a extração na pasta que desejar. 

Após realizar o download, crie um projeto em Java no eclipse e adicione as bibliotecas presentes na pasta lib do neo4j que foi baixado.





 Como é um projeto simples, escolha um diretório do seu computador que deseja criar o banco de dados e crie uma pasta nele, este é um concelho pois ele criará vários arquivos dentro desta pasta, senão ficará bangunçado.

Como estou utilizando linux vou usar os exemplos com os endereços no formato linux, caso utilize windows fique atento para isto.


Crie uma classe main, como esta abaixo:

package br.pognao.neo4j;



import org.neo4j.kernel.EmbeddedGraphDatabase;



public class Main {



    public static void main(String[] args) {

        EmbeddedGraphDatabase eg = new EmbeddedGraphDatabase("/home/pognao/dbs/db4");

        

    }

}




Ao executar este comando você perceberá que um monte de arquivos serão criados no diretório escolhido.

Caso este comando ja tenha sido executado alguma vez no mesmo diretório ele apenas irá se contectar ao banco.

Agora vamos criar um Node, para criar um node é necessário abrir uma transação, assim como é feito em qualquer outro banco de dados. Mas a grande diferença está no fato de você não poder iniciar uma transação, ao pedir esta transação ela será entregue inicializada, e você terá a opção de comitar ou dar rollback, utilizando os métodos success ou failure.

O Node da mesma forma, ao criar um node, deve-se pedir uma referência do mesmo para a instancia do banco que te dará um node com um Id. Cada node tem obrigatóriamente um campo que guarda o seu Id. Um Id não é algo sequencial, é apenas a próxima posição livre, variando de acordo com que os dados são inseridos e removidos do banco. Caso o método success não seja utilizado esta referência é destruída e o Id poderá ser utilizado novamente.

package br.pognao.neo4j;





import org.neo4j.graphdb.Node;

import org.neo4j.graphdb.Transaction;

import org.neo4j.kernel.EmbeddedGraphDatabase;



public class Main {



    public static void main(String[] args) {

        EmbeddedGraphDatabase eg = new EmbeddedGraphDatabase("/home/pognao/dbs/db4");

        Transaction transaction = eg.beginTx();

        Node node = eg.createNode();

        node.setProperty("poganao", "melhor blog kkkk");

        System.out.println(node.getId());

        transaction.success();

        transaction.finish();

    }

}





 Ao inserir um dado no banco de dados é sempre bom possuir uma ferramenta gráfica que mostre que nosso trabalho não foi em vão, o ne4j possui uma ferramenta gráfica muito limitada, porém que permite uma visualização. A ferramenta chama-se neoclipse que pode ser baixada para Linux, Mac ou Windows

Após baixar esta ferramenta basta executá-la e conectar ao banco.

Para realizar uma busca simples podemos utilizar o método getNodeById(), mas este banco de dados permite buscas mais apuradas com scripts em Cypher que podem ser feitas até pelo Neoclipse, e serão mostradas em outras postagens.

Para criar um relacionamento, basta possuir os dois nodes que desejamos criar o relacionamento e chamar o método do node origem adicionando o destino, como é mostrado no código abaixo:

package br.pognao.neo4j;





import org.neo4j.graphdb.Node;

import org.neo4j.graphdb.RelationshipType;

import org.neo4j.graphdb.Transaction;

import org.neo4j.kernel.EmbeddedGraphDatabase;



public class Main {



    public static void main(String[] args) {

        long idNode1;

        EmbeddedGraphDatabase eg = new EmbeddedGraphDatabase("/home/pognao/dbs/db4");

        Transaction transaction = eg.beginTx();

        Node node = eg.createNode();

        node.setProperty("poganao", "melhor blog kkkk");

        idNode1 = node.getId();

        System.out.println(node.getId());

        transaction.success();

        

        Node node2 = eg.createNode();

        node2.setProperty("relacionamento", "melhor blog kkkk");

        

        node2.createRelationshipTo(eg.getNodeById(idNode1), new RelationshipType() {

            

            @Override

            public String name() {

                // TODO Auto-generated method stub

                return "POSSUI";

            }

        });

        

        transaction.success();

        transaction.finish();

        

    }

}



Desta forma, ao conectar no banco pela ferramenta Neoclipse você verá algo do tipo :



Para alterar um  node basta buscá-lo e alterá-lo normalmente, lembrando sempre das transações.






Nenhum comentário:

Postar um comentário