Nodos y relaciones en Neo4j con Cypher

Resumen

Crear una base de datos de grafos con Neo4j Aura te permite modelar relaciones entre entidades de forma nativa, sin depender de joins costosos como en SQL. Aquí aprendes a configurar una instancia gratuita, crear nodos y conectar relaciones usando el lenguaje de consultas Cypher, ideal si trabajas con redes sociales, recomendaciones o cualquier sistema donde las conexiones importen tanto como los datos.

Cómo creo una instancia gratuita en Neo4j Aura

Neo4j Aura es el servicio autoadministrado en la nube de Neo4j. Para empezar solo necesitas un correo electrónico y unos minutos de paciencia mientras se aprovisiona la instancia [01:00].

Desde la página oficial entras a Aura Login, creas tu cuenta y eliges el plan gratuito. Esta opción te da espacio para hasta 200.000 nodos y 400.000 conexiones, suficiente para practicar y prototipar.

¿Qué es Neo4j Aura? Es la versión administrada en la nube de Neo4j. Tú no instalas nada: solo creas la instancia, descargas las credenciales y empiezas a escribir consultas en Cypher.

Un detalle que no puedes saltarte: al crear la instancia aparece un archivo con tus credenciales. Descárgalo en ese momento, porque ahí está la contraseña que usarás para abrir el área de trabajo [01:30].

Cómo creo nodos en Cypher con la palabra reservada CREATE

Una vez dentro del área de trabajo, los nodos se generan con la instrucción CREATE seguida de paréntesis, un identificador, el tipo de entidad y las propiedades entre llaves.

En el ejemplo del ejercicio se crean tres personas en un solo comando:

cypher CREATE (Alice:Person {name: 'Alice', age: 24}), (Samantha:Person {name: 'Samantha', age: 24}), (Bob:Person {name: 'Bob', age: 19})

Este lenguaje se llama Cypher y es el estándar para consultar grafos en Neo4j. Si vienes de SQL o JavaScript, la sintaxis se siente distinta: las propiedades usan dos puntos, no signo de igual. Ese fue justamente el primer error que apareció al ejecutar el comando [04:30].

Después de ejecutar, en el panel izquierdo aparece la etiqueta Person y al darle clic visualizas los tres nodos con sus propiedades. Pero todavía están sueltos, sin relaciones entre ellos.

Cómo conecto nodos con relaciones tipo friend usando MATCH y CREATE

Para generar una arista entre dos nodos existentes, primero los buscas con MATCH, los filtras por una propiedad y luego creas la conexión con CREATE.

La consulta para conectar a Alice con Bob como amigos queda así:

cypher MATCH (a:Person), (b:Person) WHERE a.name = 'Alice' AND b.name = 'Bob' CREATE (a)-[:friend]->(b)

La notación -[:friend]-> representa visualmente la arista: una flecha donde el texto entre corchetes es el nombre de la relación. Aquí elegimos friend pensando en una red social, pero podrías usar follows, likes o cualquier otro tipo según el caso de uso [06:30].

¿Cuál es la diferencia entre amigos y seguidores en un grafo? Los amigos son una relación bidireccional, como en Facebook. Los seguidores son unidireccionales, como en una página o en Twitter. El tipo de relación define qué información puede fluir entre los nodos.

Al visualizarlo, ya aparece la línea conectando a Alice y Bob con la etiqueta friend.

Cómo consulto los amigos de un nodo con collect y return

La ventaja real de un grafo aparece cuando consultas a través de las relaciones. Para obtener los amigos de Alice, la consulta combina MATCH con la relación y un RETURN que recolecta los nombres conectados:

cypher MATCH (alice:Person {name: 'Alice'})-[:friend]-(friends) RETURN alice.name, collect(friends.name) AS friend_names

El resultado es una tabla con el nombre de Alice y un arreglo con los nombres de las personas conectadas a ella por una relación friend [09:00].

¿Por qué los grafos son más rápidos que SQL para relaciones? En SQL necesitas joins entre tablas con llaves foráneas, y a escala esos joins consumen mucho cómputo. En un grafo las conexiones son nativas: recorrer una relación es una operación directa, no una búsqueda en otra tabla.

Qué hace especial a una base de datos de grafos frente a SQL

La diferencia clave es que las relaciones viven dentro del modelo, no se reconstruyen en cada consulta. Eso cambia tres cosas concretas en tu día a día como desarrollador:

  • Rendimiento: recorrer relaciones no escala con el tamaño total de la base, sino con la cantidad de conexiones del nodo que consultas.
  • Expresividad: la sintaxis de Cypher se parece a dibujar el grafo, lo que hace consultas complejas más legibles.
  • Modelado natural: redes sociales, recomendaciones, fraude o rutas se modelan tal como existen en la realidad.

El reto que te dejo es claro: genera la conexión de amistad entre Alice y Samantha, vuelve a ejecutar la consulta de friend_names y comparte en los comentarios la imagen de los tres nodos conectados con el resultado de tu consulta.