MongoDB Academy · Lección

Cuándo utilizar una base de datos de grafos como Neo4j

Identifique problemas con estructura de grafo —motores de recomendación, detección de fraude y grafos de conocimiento— en los que el recorrido nativo de Neo4j supera las cadenas de $lookup de MongoDB.

Lección 4 de 413 pasos

Cuándo utilizar una base de datos de grafos como Neo4j es una lección gratuita de MongoDB Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de MongoDB Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de MongoDB Academy incluye 4 lecciones en total.

¿Qué es una base de datos de grafos?

Una base de datos de grafos representa los datos como nodos (entidades) y aristas (relaciones entre entidades). Cada arista es un objeto de primer nivel con un tipo y sus propias propiedades. A diferencia de las bases de datos relacionales o de documentos, en las que las relaciones se sobreentienden mediante claves externas o referencias incrustadas, las bases de datos de grafos almacenan las relaciones como conexiones explícitas, con un recorrido O(1) por salto: seguir una relación requiere un tiempo constante independientemente del tamaño de la base de datos.

El problema del recorrido de relaciones

Las bases de datos de documentos y relacionales están optimizadas para encontrar entidades: obtener un usuario por su ID o consultar pedidos por estado. Tienen dificultades para recorrer relaciones: «encontrar todos los amigos de los amigos de Alice que compraron el mismo producto que Alice durante el último mes». Cada salto requiere un $lookup o un JOIN. Tres saltos de profundidad implican tres uniones anidadas. Con 10 saltos a través de millones de nodos, el rendimiento de MongoDB se degrada exponencialmente, mientras que el de Neo4j se mantiene estable.

// MongoDB: 3-hop traversal — three nested $lookup stages
db.users.aggregate([
  { $match: { _id: aliceId } },
  { $lookup: { from: 'follows', localField: '_id', foreignField: 'followerId', as: 'following' } },
  { $unwind: '$following' },
  { $lookup: { from: 'follows', localField: 'following.followeeId', foreignField: 'followerId', as: 'followingOfFollowing' } },
  // Expensive and increasingly slow with scale
])

Neo4j y el lenguaje de consultas Cypher

Neo4j es la base de datos de grafos más popular y utiliza el lenguaje de consultas Cypher, un lenguaje declarativo basado en patrones para recorrer grafos. Una consulta de Cypher describe el patrón del grafo que busca mediante una notación de arte ASCII: nodos en () y relaciones en -[]->. El motor de consultas encuentra de forma eficiente todos los subgrafos que coinciden con el patrón mediante adyacencia nativa sin índices.

// Cypher: find Alice's second-degree connections (friends of friends)
MATCH (alice:User { name: 'Alice' })
      -[:FOLLOWS]->(:User)
      -[:FOLLOWS]->(foaf:User)
WHERE NOT (alice)-[:FOLLOWS]->(foaf)
  AND foaf <> alice
RETURN DISTINCT foaf.name, foaf.email
LIMIT 50

// This is O(connections traversed), not O(total users in DB)

Caso de uso clásico de grafos: motores de recomendación

Los sistemas de recomendación dependen del recorrido de redes de relaciones: «los usuarios que compraron lo mismo que usted también compraron X». En un grafo, cada compra es una arista entre un nodo de usuario y un nodo de producto. Encontrar recomendaciones mediante filtrado colaborativo requiere un recorrido de 2 saltos: Usuario → Producto → (otros usuarios que compraron ese producto) → (otros productos que compraron esos usuarios). Neo4j gestiona millones de estos recorridos por segundo. $graphLookup de MongoDB puede hacerlo, pero su rendimiento se degrada a gran escala.

// Cypher: collaborative filtering recommendation
MATCH (me:User { _id: 'alice123' })
      -[:PURCHASED]->(p:Product)
      <-[:PURCHASED]-(other:User)
      -[:PURCHASED]->(rec:Product)
WHERE NOT (me)-[:PURCHASED]->(rec)
RETURN rec.name, COUNT(other) AS score
ORDER BY score DESC
LIMIT 10

Detección de fraude mediante análisis de grafos

Las redes de fraude suelen implicar información de identidad compartida: varias cuentas que comparten el mismo ID de dispositivo, número de teléfono, dirección IP o dirección de facturación. Las bases de datos de grafos son excelentes para detectar estas redes recorriendo sus relaciones: «encontrar todas las cuentas conectadas a esta cuenta sospechosa mediante atributos compartidos en un máximo de 3 saltos». La puntuación de fraude en tiempo real durante una transacción —consultar un grafo con millones de entidades conectadas en milisegundos— es una fortaleza nativa de Neo4j que MongoDB no puede igualar.

// Cypher: find fraud ring (accounts sharing device/phone/address)
MATCH (suspect:Account { id: 'acc-999' })
      -[:SHARES_DEVICE|SHARES_PHONE|SHARES_ADDRESS*1..3]-(related:Account)
WHERE related.status = 'active'
RETURN related.id, related.email
LIMIT 100

Grafos de conocimiento

Un grafo de conocimiento modela entidades y sus relaciones semánticas, como la información de Wikipedia estructurada en forma de grafo. Los grafos de conocimiento impulsan el reconocimiento de entidades en los motores de búsqueda, las respuestas basadas en hechos de los asistentes de IA y las ontologías empresariales. El modelo de grafo encaja de forma natural: Persona conoce a Persona, Persona trabajaEn Empresa, Empresa estáUbicadaEn Ciudad, Ciudad esCapitalDe País. Recorrer estas cadenas semánticas es precisamente para lo que están diseñadas las bases de datos de grafos.

Cuándo es suficiente $graphLookup de MongoDB

No todos los problemas de grafos requieren Neo4j. $graphLookup de MongoDB gestiona razonablemente bien los recorridos de árboles y grafos en los siguientes casos: jerarquías poco profundas (menos de 5 o 6 saltos); grafos de tamaño moderado (desde miles hasta unos pocos millones de nodos); y consultas de recorrido poco frecuentes que pueden tolerar una latencia mayor. Si las consultas de grafos son una funcionalidad secundaria de una aplicación basada principalmente en datos de documentos, mantenerlo todo en MongoDB simplifica considerablemente la pila.

// MongoDB $graphLookup: category hierarchy traversal
db.categories.aggregate([
  { $match: { _id: 1 } },
  {
    $graphLookup: {
      from: 'categories',
      startWith: '$_id',
      connectFromField: '_id',
      connectToField: 'parentId',
      as: 'descendants',
      maxDepth: 5
    }
  }
])

Cuándo elegir Neo4j en lugar de MongoDB

Elija Neo4j (u otra base de datos de grafos) cuando los recorridos profundos de varios saltos sean una funcionalidad esencial (redes sociales, grafos de conocimiento, detección de fraude); la propia relación contenga propiedades complejas (por ejemplo, una arista FOLLOWS que almacene cuándo se produjo el seguimiento y si es mutuo); las consultas de grafos deban devolver resultados en tiempo real con alta concurrencia; o todo el dominio se centre en las relaciones y no en las entidades. Para redes sociales, grafos de identidad, topologías de red y grafos de dependencias, recurra a Neo4j.

Persistencia políglota: usar ambas

Muchos sistemas grandes utilizan persistencia políglota: distintas bases de datos para distintas necesidades. Una plataforma social podría almacenar los perfiles de usuario y las publicaciones en MongoDB (consultas enriquecidas sobre documentos), los grafos de amistades e intereses en Neo4j (recorridos rápidos), los datos de sesión en Redis (búsquedas en menos de un milisegundo) y los análisis en un almacén columnar. Cada base de datos hace aquello para lo que está mejor preparada. La complejidad reside en gestionar la consistencia entre sistemas, pero las mejoras de rendimiento y escalabilidad suelen justificarla.

Comparación de los modelos de datos de MongoDB y Neo4j

En MongoDB, una relación social se modela como un documento en una colección follows con los campos followerId y followeeId. En Neo4j, es una arista FOLLOWS que conecta directamente dos nodos User. El modelo de grafo elimina la colección intermedia y permite recorrer el grafo directamente mediante punteros. El modelo de documentos es mejor para obtener los datos del perfil del usuario; el modelo de grafo es mejor para recorrer sus conexiones sociales.

// MongoDB: relationships as documents
{ _id: ObjectId(), followerId: ObjectId('alice'), followeeId: ObjectId('bob'), createdAt: new Date() }

// Neo4j Cypher equivalent:
// (alice:User)-[:FOLLOWS { createdAt: datetime() }]->(bob:User)
// Stored as direct pointer — no intermediate collection needed

Propiedades de los grafos y tipos de relaciones

Las aristas de los grafos en Neo4j tienen un tipo (similar a una etiqueta) y pueden tener propiedades. Un grafo social podría tener tipos de arista FOLLOWS, LIKES, PURCHASED y REVIEWED, cada uno con sus propias propiedades. Las consultas de Cypher pueden coincidir por tipo de arista y filtrar por sus propiedades, lo que permite realizar consultas de relaciones enriquecidas. Esto resulta mucho más natural que almacenar un campo type en una colección relationships de MongoDB y hacer una unión sobre él.

// Cypher: find products purchased within the last 7 days by connections
MATCH (me:User { id: 'alice' })
      -[:FOLLOWS*1..2]->(friend:User)
      -[p:PURCHASED]->(prod:Product)
WHERE p.purchasedAt >= datetime() - duration('P7D')
RETURN prod.name, COUNT(friend) AS friendsBought
ORDER BY friendsBought DESC
LIMIT 5

Comprobación rápida

Compruebe sus conocimientos sobre los conceptos de MongoDB y las bases de datos NoSQL de esta lección.

Resumen de la lección

En esta lección ha aprendido que las bases de datos de grafos como Neo4j destacan en los recorridos profundos de relaciones de varios saltos —motores de recomendación, detección de fraude y grafos de conocimiento—, donde las cadenas de $lookup de MongoDB se degradan exponencialmente; que el lenguaje Cypher de Neo4j expresa patrones de grafos de forma declarativa, de un modo que ningún lenguaje de consultas de documentos puede igualar; y que la persistencia políglota, usando MongoDB para los datos de documentos y Neo4j para recorrer relaciones, es un patrón habitual en producción. A continuación, abordaremos el proyecto final: diseñar la arquitectura de una aplicación MongoDB lista para producción.

Gratis para empezar

Aprende JavaScript con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Cuándo utilizar una base de datos de grafos como Neo4j» es gratis?

Sí — el texto completo de «Cuándo utilizar una base de datos de grafos como Neo4j» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de MongoDB Academy, actualiza a CoddyKit PRO. El curso de MongoDB Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Cuándo utilizar una base de datos de grafos como Neo4j»?

Identifique problemas con estructura de grafo —motores de recomendación, detección de fraude y grafos de conocimiento— en los que el recorrido nativo de Neo4j supera las cadenas de $lookup de MongoDB. Practicas MongoDB Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar MongoDB Academy?

No se requiere experiencia previa. MongoDB Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Cuándo utilizar una base de datos de grafos como Neo4j»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de MongoDB Academy?

Sí. Cada lección de MongoDB Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. MongoDB frente a Redis: documentos frente a caché clave-valor
  2. MongoDB frente a Cassandra: escrituras a escala planetaria
  3. MongoDB frente a DynamoDB: compensaciones nativas de la nube
  4. Cuándo utilizar una base de datos de grafos como Neo4j
← Volver a MongoDB Academy