Las relaciones primero
En un grafo las conexiones se guardan, no se calculan. Al terminar sabrás escribir consultas en Cypher que recorren una red de películas.
Primero, la idea completa
Mira el video entero o salta a la parte que quieras repasar. Después, cada idea tiene su propia escena para tocarla.
Nodos, relaciones y propiedades
Una base de datos de grafos representa los datos como un dibujo de puntos y flechas. Tiene tres piezas:
- Nodos (o vértices): las cosas. Cada uno puede tener una o varias etiquetas que dicen qué es:
:Person,:Movie. - Relaciones: las flechas que conectan dos nodos. Tienen un tipo (
:ACTED_IN,:DIRECTED) y una dirección: salen de un nodo de inicio y llegan a un nodo final. - Propiedades: pares clave-valor que pueden tener tanto los nodos como las relaciones:
name: "Tom Hanks",born: 1956,roles: ["Chuck Noland"].
La diferencia con una relacional es que las conexiones se guardan, no se calculan. En una tabla, saber quién actuó en qué exige un JOIN que busca coincidencias; en un grafo, el nodo ya sabe a quién apunta, y basta con recorrer la flecha.
- Tablas → grafos · Filas → nodos · Columnas → propiedades · Restricciones → relaciones · JOIN → recorrido.
Neo4j es la base de grafos más conocida: corre sobre la máquina virtual de Java, cumple ACID, tiene un esquema flexible, índices, una aplicación web para administrarla y su propio lenguaje de consultas, Cypher.
¿A quién llega Ana en 1, 2 o 3 saltos de amistad? Compara lo que cuesta en un grafo y en tablas.
Consultas que se dibujan
Cypher describe patrones con arte ASCII: los nodos van entre paréntesis y las relaciones son flechas con corchetes.
(p:Person {name: "Tom Hanks"}): un nodo con etiqueta Person y esa propiedad. La letrapes una variable para usarlo después.(p)-[:ACTED_IN]->(m:Movie): p actuó en una película m.(a)-[:FRIEND]-(b): sin punta de flecha, en cualquier dirección.(a)-[:FRIEND*2]->(c): exactamente dos saltos.*1..3: de uno a tres.
Una consulta combina cláusulas. MATCH dice el patrón que buscas; WHERE le agrega condiciones; RETURN dice qué devolver. Para crear se usa CREATE:
CREATE (n:Person {name: "Ana", born: 1999})crea un nodo.MATCH (a:Person {name: "Ana"}), (m:Movie {title: "Top Gun"}) CREATE (a)-[:REVIEWED {rating: 9}]->(m)busca dos nodos que ya existen y los conecta.MATCH (m:Movie) WHERE m.released >= 2000 RETURN m.title ORDER BY m.released LIMIT 5filtra, ordena y limita.
Elige una persona y una pregunta. Mira el patrón en Cypher y lo que encuentra en el grafo.
SET, REMOVE y DELETE
SET n.ciudad = "Antigua"agrega o cambia una propiedad;SET n:Actoragrega una etiqueta.REMOVE n.ciudadquita una propiedad;REMOVE n:Actor, una etiqueta.DELETE rborra una relación. Un nodo solo se puede borrar conDELETEsi ya no tiene relaciones; para borrarlo junto con todas ellas se usaDETACH DELETE n.MATCH (n) DETACH DELETE nvacía la base completa: cuidado.
Para cargar datos masivos, LOAD CSV WITH HEADERS FROM 'archivo.csv' AS fila lee un archivo y crea nodos y relaciones por cada fila, incluso con millones de registros.
Antes de leer la respuesta
Las personas tienen la propiedad
name y born; las películas, title y released. Las relaciones son ACTED_IN, DIRECTED, PRODUCED y WROTE. Respeta mayúsculas y minúsculas.Tu turno: una base de películas en Cypher
Un Neo4j con una pequeña base de películas: actores, directores, productores y guionistas. Escribe consultas en Cypher; lo que devuelve cada una se ilumina en el grafo y aparece en la tabla de resultados.
Comprueba lo que entendiste
Cada respuesta incorrecta explica por qué parece correcta y en qué falla.