De la pizarra a la base de datos –> Neo4j

He de confesar que quizá no sea muy objetivo a la hora de comparar una base de datos orientada a grafos con otras NoSQL. Para aprender algo nuevo suelo visualizar relaciones, y en general tiendo a fijarme menos en los detalles y mas en que papel cumplen unas cosas respecto a otras.

un grafo

Y resulta que estos almacenes de datos me dan lo que me gusta, su foco está puesto en las relaciones, y de forma muy sencilla puedo convertir el dibujito de cajitas y flechas que tengo en la cabeza en una base de datos real. Apenas hay un salto o traducción.

Un grafo, en plan sencillo, lo “pintas” a base de nodos y relaciones, Pedro conoce a Luis, que a su vez conoce a Ana y a Maite, que a su vez ha actuado en una película llamada Amanecer, que ha su vez ha sido dirigida por alguien… Muchos tipos de entidades (personas y películas, por ejemplo) y de relaciones (“conoce a” y “ha actuado en”).

grafo

Las orientadas a grafos junto con las relacionales de toda la vida parecen ser las mejores herramientas para guardar datos con mucha complejidad, con multitud de interconexiones. Pero la primera lo hace mejor que la segunda porque en un almacén relacional los vínculos entre los elementos tienen que ser encontrados, hay que “calcularlos” con búsquedas costosas (haciendo joins), mientras que en uno orientado a grafos esas relaciones existen explícitamente.

Esa facilidad para representar la complejidad hace que sea sencillo representar otros tipos de almacenes de datos como uno por grafos, como aparece en los dos pantallazos que vienen a continuación.

base datos relacional como grafo

base datos documental como grafo

Hace años apenas se oía hablar de esta forma de guardar los datos, mientras que ahora hay muchos productos libres y de pago para esto. Neo4j es un ejemplo de uno de ellos, una solución open source (no del todo), la mas popular hoy por hoy, desarrollada por una startup sueca radicada en Malmö.

Como en el caso de Mongo y otros, se vuelcan en comunicar y en formar a los que se interesan por su producto. Tienen una página introductoria recomendable y una cuidada comunidad que desarrolla eventos por todo el mundo.

Esta empresa ha creado para las consultas un lenguaje equivalente al SQL relacional. El lenguaje se llama Cypher y usa una sintaxis muy visual. Lo que muestro a continuación es un ejemplo de como se representa una relación.

una relación en cypher

Y esto es una consulta pasándole el patrón que debe buscar en la cláusula MATCH. A partir de todas las coincidencias que encuentre devolverá el resultado que indica.

una consulta en cypher

Otro de los puntos interesantes de Neo4j, común en el ámbito NoSQL, es que carece de esquema, no te fuerza a una estructura determinada para los datos que debe poseer una persona, una película o la entidad que sea. Si hay personas con 1 apellido, otras con 2 y mañana te enteras de que las hay con tres, la BD lo acepta sin necesidad de costosos cambios.

También puede escalar con facilidad (pudiendo procesar volúmenes inesperados de datos) y soporta transacciones como una relacional (echando para atrás todos los cambios en caso de que alguno falle).

En fin, completita, completita, y mas “cool” que ninguna relacional. Así que, puestos a trabajar con datos con muchas relaciones, ¿porque dudar? ¿que ventaja tiene una relacional sobre esto?

Bueno, aparte de que bases de datos como Postgres son herramientas muy contrastadas, y capaces de ser mas NoSQL de lo que creemos, los grafos pueden ser muy potentes, pero pretender reflejar ciertos tipos de información de esta manera puede ser costoso y mas dificil de mantener que si usamos las tablas de toda la vida.  Esto no es para llevar las cuentas de los clientes de un banco, sería como matar moscas a cañonazos.

Estas bases de datos se están utilizando en dominios bien definidos que “huelen” a grafo. Partieron como el soporte para las redes sociales de la web 2.0 y progresivamente van demostrando su capacidad para abarcar nuevos ámbitos como el cálculo de rutas para empresas de paquetería, programación del mantenimiento de red en telecos, detección de fraude en entidades financieras, etc.  Me pregunto hasta donde podrán llegar.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *