Introducción a Neo4j

Ahora que ya conocemos las principales características de las bases de datos NoSQL en grafo y del modelo de datos que utilizan es el momento de ver, mediante ejemplos prácticos, cómo almacenar y manejar datos en estas bases de datos. En esta entrada comentaremos las principales características de Neo4j, veremos cómo instalar Neo4j en nuestro ordenador y cómo crear una base de datos y empezar a “jugar” con ella.

Actualmente, Neo4j es la base de datos en grafo más popular según el ranking de db-engines.com. A fecha 2018, también es el número 21 de 295 en el ranking general de bases de datos.

El modelo de datos utilizado por Neo4j es un grafo de propiedades etiquetado. Por tanto, las unidades básicas de procesamiento en Neo4j son las mismas que explicamos en la entrada anterior: nodos, relaciones entre nodos, propiedades (definidas sobre nodos o relaciones) y etiquetas que permiten definir el tipo de los nodos y de las relaciones.

En Neo4j se utilizan los dos puntos “:” para representar las etiquetas. Por lo tanto, :Book, :Person y :HAS_READ, representarán las etiquetas Book, Persony HAS_READ. Por otro lado, para distinguir fácilmente las etiquetas de nodo de las de relación, en Neo4j se escriben las etiquetas de relación en mayúsculas y las etiquetas de nodo con la primera letra en mayúscula y el resto en minúsculas. Así pues, Book y Person serían etiquetas de nodo y HAS_READ una etiqueta de relación que representa qué libros (nodos de tipo :Book) ha leído una persona (nodo de tipo :Person). Las propiedades acostumbran a representarse en minúsculas.

Neo4j es una base de datos schemaless. Esto no quiere decir que la base de datos no utilice un esquema sino que este esquema es flexible y no es necesario que esté prefijado ni definido antes de la introducción de nuevos datos, lo cual permite que las modificaciones (o alteraciones) del esquema se puedan realizar fácilmente. Por lo tanto, los nodos de un mismo tipo pueden tener propiedades distintas (un nodo que representa a una persona de España podría tener una propiedad para representar el DNI, y otra con nacionalidad de EEUU no tendría la propiedad DNI sino una llamada driverLicense).

Aun siendo schemaless, en Neo4j, el esquema tiene bastante protagonismo. Por un lado, las etiquetas permiten indicar el tipo de los nodos y las relaciones. Esto obliga a que los diseñadores deban pensar con detenimiento, antes de crear la base de datos, qué tipos de nodo y de relación se van a tener que representar, cuáles son sus principales propiedades, y escoger una etiqueta para cada uno de ellos. Por otro lado, en Neo4j, el esquema puede utilizarse para indicar algunas restricciones de integridad. A día de hoy (junio de 2018) las restricciones de integridad soportadas son las siguientes:

  • Unicidad: permite indicar que el valor de una propiedad debe ser único para todos los nodos del mismo tipo. Por ejemplo, se podría indicar que no pueden haber dos libros con el mismo ISBN (en otras palabras, no existen dos nodos de tipo :Book con el mismo valor para la propiedad isbn).
  • Existencia: permite indicar que una propiedad (o un conjunto de ellas) debe existir para todos los nodos de un tipo. Por ejemplo, se podría indicar que todo libro debe tener un ISBN y un título (todos los nodos de tipo :Book deben tener las propiedades isbn y title).
  • Clave: permite indicar que una propiedad es clave para todos los nodos de un determinado tipo, es decir, que todos sus nodos deben tener definida la propiedad y que el valor de la propiedad es único. Por ejemplo, la propiedad isbn es una clave para los nodos de tipo :Book. La diferencia entre la restricción de integridad de unicidad y clave es que la primera no requiere que la propiedad se defina pero, si se hace, el valor asociado no puede repetirse. Para aquellos que estéis familiarizados con las bases de datos relacionales, la restricción de unicidad se corresponde con la restricción de UNIQUE, mientras que la de clave se corresponde con la restricción de PRIMARY KEY.

Neo4j permite acceder a sus datos de diversas formas y usando distintos lenguajes de consulta. Se puede acceder a sus datos desde una consola de texto, un entorno web gráfico (el que utilizaremos en estas entradas) y mediante APIs. Respecto a sus lenguajes de consulta, destacamos Cypher, que es un lenguaje declarativo que permite consultar y manipular grafos, y Gremlin, que es un lenguaje específico de dominio para la gestión de grafos.

En Neo4j, para identificar un conjunto de datos sobre los que aplicar una operación, se realiza lo que se denomina graph traversing. Podríamos traducir este concepto como “navegación por el grafo” y es la acción de navegar por el grafo -a partir de un punto de inicio (o un conjunto de puntos de inicio)- lo que permite obtener los resultados deseados (es decir, obtener los elementos sobre los cuales realizar la operación).

Bien, ahora que ya tenemos las nociones básicas de Neo4j es el momento de instalarlo y empezar a practicar. Para ello os animamos a instalar Neo4j desde la siguiente página web: https://neo4j.com/download/. En el siguiente vídeo tenéis un pequeño tutorial, paso a paso, que explica cómo instalar y empezar a utilizar Neo4j.

 

Una vez hayáis creado vuestra base de datos (tal y como se explica en el vídeo), os animamos a copiar y pegar la siguiente sentencia Cypher en la interfaz de Neo4j para que veáis lo fácil que es crear nodos, relaciones y visualizarlos. No os preocupéis si no entendéis completamente el código: en las siguientes entradas “destriparemos” Cypher y aprenderemos a hacer sentencias como esta y otras más complejas.

¡Felicidades! Habéis creado vuestra primera base de datos en Neo4j. Os debería haber salido algo parecido al siguiente grafo:

Hasta aquí esta segunda entrada sobre Neo4j. En el caso de que queráis obtener más información e ir avanzando, podéis visualizar este vídeo. En la próxima entrada veremos cómo funciona el lenguaje Cypher y crearemos una nueva base de datos (ya siendo conscientes de lo que estáis haciendo en cada momento). Más adelante cargaremos una base de datos de películas proporcionada en Neo4j y aprenderemos a realizar consultas más complejas y de forma eficiente.

 

Jordi Conesa es profesor de los Estudios de Informática, Multimedia y Telecomunicación en la UOC y coordinador del ámbito de data science del eHealth Center. Su docencia se enfoca a las áreas de bases de datos, ciencia de datos e ingeniería del software y su investigación en el análisis de datos y el eLearning.

M. Elena Rodríguez es profesora de los Estudios de Informática, Multimedia y Telecomunicación de la UOC y forma parte del proyecto TeSLA, participando en tareas que se centran en el diseño del sistema TeSLA y en el desarrollo de pruebas piloto en la UOC. Licenciada en Informática por la Universitat Politècnica de Catalunya y doctora por la Universidad de Alcalá, sus áreas de conocimiento e investigación incluyen las bases de datos y la ingeniería de ontologías para el desarrollo de sistemas de e-learning basados en estándares.

1 Comment

  1. muy buena la explicacion me ayudo mucho a entender todo esto pues debo realizar un proyecto de grado muchas felicidades

    Reply

Comentar

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

Leer entrada anterior
Estrategia de SI: ¿qué evaluamos cuando evaluamos?

Estamos dedicando una temporada a la formación de la estrategia de sistemas de información, o sea, los procesos sociales y organizativos...

Cerrar