martes, 29 de enero de 2013

Introducción a Neo4j

Neo4j es un sistema de base de datos en grafo. Algunas de las ventajas que propone este paradigma son:

  • Escalabilidad
  • Alto rendimiento
  • Lenguaje de consultas "human friendly"

Los grafos se componen de nodos y relaciones. Ambos tienen propiedades. Las consultas sobre el grafo se basan en "traversals" que serían los caminos que unen los distintos nodos. Por último, para realizar búsquedas sobre nodos y relaciones, Neo4j utiliza índices sobre sus propiedades.

Cypher, el lenguaje formal utilizado para hacer las consultas, utiliza tanto los índices como los "traversals" para obtener datos.

Por ejemplo, obtenemos todas las películas rodadas el año 1999 mediante un acceso al índice de propiedades de películas, y luego mediante un "traversal" obtenermos las mascotas de los actores de dichas películas.

Cypher es un lenguaje bastante intuitivo y potente, y permite un grado de abstracción mayor que el SQL. De hecho, anunciar la consulta con lenguaje natural es una buena manera de empezar a realizar la query.

Mascotas de los actores que trabajaron en películas rodadas en 1999

La consulta final sería algo parecido a:


START movie=node:node_auto_index(year="1999") 
MATCH movie<-[:ACTS_IN]-actor-[:OWNS]->mascota 
RETURN mascota;


Uno de nuestras tareas será identificar qué elementos representamos como propiedades y qué elementos representamos como nodos. Por ejemplo: un nodo persona puede tener una propiedad "oficio" con valor "albañil", pero también podemos tener un nodo "albañil" y una relación -[:OFICIO]-> entre la persona y el nodo de "albañil". Ésto tendrá impacto en el rendimiento y en las consultas.

Neo4j está desarrollado en Java y se puede utilizado mediante su API y como componente externo, mediante una interfaz REST. Neo4j utiliza el sistema de ficheros para guardar todos su datos, que pueden ser fácilmente exportados e importados de una aplicación a otra.

Neo4j ha desarrollado un servidor que permite hacer operaciones básicas con los grafos, como exportar/importar, visualizar, manipular, ejecutar consultas en una consola, etc. Éste será el primer paso antes de implantarlo en un sistema propio.

Existe un proyecto de Spring que facilita la implementación de la capa de datos con Neo4j. Habrá que estudiarlo, no nos interesa comprometernos demasiado con un determinado framework. La solución debe ser reutilizable e independiente. Cuando lleguemos a la fase de definir el alcance de la implementación de nuestra librería gedcom-neo4j lo estudiaremos.

Enlaces útiles:
Neo4j
Documentación
Cheatsheet
Proyecto Spring
Blog
Videos




No hay comentarios:

Publicar un comentario