Primeros pasos con Neo4j

Neo4j es una base de datos open-source orientada a grafos, implementada en Java y Scala. La información se almacena de forma relacionada formando un grafo dirigido entre los nodos y las relaciones entre ellos. Se integra perfectamente con múltiples lenguajes como Java, PHP, Ruby, .Net, Python, Node, etc. Los casos de usos incluyen gestión de redes, redes sociales, gestión de proyectos y organizaciones, investigación científica, etc.

El código fuente está disponible en GitHub, y se puede encontrar soporte en StackOverflow y el grupo de Google Neo4j. Actualmente, es la base de datos NoSQL basada en grafos más popular en el mercado, siendo usado por clientes como Walmart, Ebay, HP, entre otros.

Versiones disponibles

La Neo4j Community Edition esta licenciada bajo GNU General Public License (GPL) v3, y la Neo4j Enterprise Edition tiene una licencia dual bajo Neo4j commercial license como así también la gratuita Affero General Public License (AGPL) v3.

Para fines prácticos y sobre todo de aprendizaje, la Community Edition es suficiente para nosotros. Como ocurre con otras bases NoSQL, la versión Enterprise, tiene otras ventajas como clústers, monitorización, backups en caliente y un sistema de cache de alto rendimiento, además de soporte técnico.

Instalación

Se puede descargar el instalador de Neo4j desde http://neo4j.com/download. Si la instalación termina correctamente, por defecto, podremos acceder al cliente Neo4j en http://localhost:7474, para trabajar y visualizar la base de datos de Neo4j.

neo4j-nosql-2

Aquí también tenemos una ayuda para ir conociendo la interfaz del cliente web, así como una guía que explica los conceptos de grafo, nodo, etiqueta, relación y unos primeros pasos con el lenguaje Cypher.

Lenguaje Cypher

Cypher es un lenguaje declarativo para trabajar con grafos, y que nos permite crear la estructura del grafo, nodos, relaciones y hacer consultas filtrando por diferente argumentos, ordenar, etc. Para aprender un poco mas sobre el lenguaje, con la instalación tenemos una base de prueba «The Movie Graph», que se basa en un grafo de películas y actores.

Basandonos en datos que nos provee esta base de datos, se muestran algunos ejemplos para entender un poco mejor este lenguaje, y ver como podemos realizar algunas de las consultas, que normalmente se nos ocurrirían hacer sobre una base de datos.

Creación del grafo

Con la base de ejemplo provista en el instalador, tenemos esta primer opción que es crear los nodos.

Con CREATE estamos creando un nodo del grafo (entre paréntesis) con etiqueta «Movie», que se guarda en la variable «TheMatrix» (se usa luego para hacer referencia al nodo) , y tiene las propiedades: title, released y tagline, con los respectivos valores en formato JSON. Por ejemplo, para crear para la pelicula Matrix, sus actores, directores y productores, tomamos una parte de la consulta que crea el grafo:

CREATE (TheMatrix:Movie {title:’The Matrix’, released:1999, tagline:’Welcome to the Real World’})

CREATE (Keanu:Person {name:’Keanu Reeves’, born:1964})

CREATE (Carrie:Person {name:’Carrie-Anne Moss’, born:1967})

CREATE (Laurence:Person {name:’Laurence Fishburne’, born:1961})

CREATE (Hugo:Person {name:’Hugo Weaving’, born:1960})

CREATE (AndyW:Person {name:’Andy Wachowski’, born:1967})

CREATE (LanaW:Person {name:’Lana Wachowski’, born:1965})

CREATE (JoelS:Person {name:’Joel Silver’, born:1952})

CREATE

(Keanu)-[:ACTED_IN {roles:[‘Neo’]}]->(TheMatrix),

(Carrie)-[:ACTED_IN {roles:[‘Trinity’]}]->(TheMatrix),

Y ahora para crear las relaciones, de modo que el grafo tenga algún sentido, también se usa el comando CREATE. En el ejemplo anterior, si miramos las 2 últimas sentencias, estas crean relaciones entre nodos, entonces por ejemplo, se crea la relación dond nos dice que la persona Keanu actuó con el rol de Neo en The Matrix, y que la persona Carrie actuó con el rol de Trinity en The Matrix

Consultas

Luego de ejecutada la creacion del grafo, podemos ejecutar alguna de las consultas de ejemplo que ya muestra el cliente, o bien escribir algunas nosotros. Por ejemplo:

#Mostrar el grafo completo, incluyendo todos los nodos y relaciones

CYPHER

MATCH (n) RETURN n

neo4j-nosql-3

#Listar todos las películas de Tom Hanks

CYPHER

MATCH (tom:Person {name: «Tom Hanks»})-[:ACTED_IN]->(tomHanksMovies) RETURN tom,tomHanksMovies

neo4j-nosql-4

Con esto hemos podido ver como funciona Neo4j, como se crea el grafo con sus nodos y relaciones, y así también algunas consultas básicas, usando Cypher.

Links útiles

Website de Neo4j

Repositorio GitHub para proyectos de ejemplo por lenguaje

Get in Touch