Neptune
📘 ¿Qué es Amazon Neptune?
Amazon Neptune es un servicio de base de datos de grafos completamente gestionado y optimizado para almacenar y consultar relaciones altamente conectadas. Permite modelar datos como nodos (vértices) y relaciones (aristas).
-
🧠 Soporta grafos propiedad y de RDF (triple store).
-
🔁 Diseñado para consultas con baja latencia en relaciones múltiples.
-
⚙️ Compatible con Gremlin, openCypher, y SPARQL.
-
🔐 Cifrado, backup, alta disponibilidad integrados.
🧩 ¿Qué tipo de grafos soporta?
| Modelo de grafo | Lenguaje | Ideal para… |
|---|---|---|
| Property Graph | Gremlin, openCypher | Redes sociales, recomendaciones |
| RDF (Semantic Web) | SPARQL | Ontologías, datos enlazados (Linked Data) |
🧱 Componentes principales
-
Nodo (vértice): Representa una entidad (ej. persona, lugar).
-
Relación (arista): Conecta dos nodos con una dirección y propiedad.
-
Propiedades: Metadatos en nodos o relaciones.
-
Triplas (RDF): Sujeto - predicado - objeto (SPARQL).
🚀 Casos de uso
-
Sistemas de recomendación (ej: “personas similares”)
-
Detección de fraudes (transacciones sospechosas)
-
Gestión de redes sociales
-
Sistemas de conocimiento, inferencia semántica
-
Análisis de redes (TI, sociales, logísticas)
⚙️ Características técnicas
| Característica | Detalle |
|---|---|
| Modelos soportados | Property Graph y RDF |
| Lenguajes de consulta | Gremlin, SPARQL, openCypher (beta) |
| Alta disponibilidad | Réplica multi-AZ, failover automático |
| Backups | Automáticos y snapshots manuales |
| Cifrado | En tránsito (TLS) y en reposo (KMS) |
| Escalado | Hasta 15 réplicas de lectura por clúster |
| Conexión | VPC privado, puerto 8182 (Gremlin) / 8182/SPARQL |
| Máximo de nodos por clúster | 16 (1 writer + 15 readers) |
🛠️ Creación rápida desde CLI
aws neptune create-db-cluster \
--db-cluster-identifier mi-grafo \
--engine neptune \
--master-username admin \
--master-user-password ClaveSegura123 \
--vpc-security-group-ids sg-12345678
aws neptune create-db-instance \
--db-instance-identifier neptune-instance1 \
--db-cluster-identifier mi-grafo \
--db-instance-class db.r5.large \
--engine neptune
🔎 Ejemplos de consultas
🧵 Gremlin (Property Graph)
// Encuentra amigos de un usuario
g.V().has('name', 'Ana').out('friend').values('name')
// Busca películas vistas por amigos
g.V().has('name', 'Ana').out('friend').out('watched').values('title')
🧠 SPARQL (RDF)
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE {
?person a foaf:Person .
?person foaf:name ?name .
}
📦 Integración y herramientas
| Herramienta / Servicio | Uso principal |
|---|---|
| Gremlin Console | Interacción con la base vía shell |
| Neptune Workbench | Jupyter notebooks con plantillas Gremlin/SPARQL |
| IAM | Autenticación y autorización |
| VPC | Acceso seguro y privado |
| CloudWatch | Monitoreo de rendimiento y métricas |
| Lambda + Neptune | Triggers y procesamiento en tiempo real |
| S3 + Bulk Loader | Carga masiva de datos |
📤 Bulk Loader (importación masiva)
-
Carga desde archivos CSV, RDF, o JSON almacenados en Amazon S3.
-
Formato para Property Graph:
.csv -
Formato RDF:
.ttl,.rdf,.ntriples -
Ejemplo de comando:
curl -X POST https://<endpoint>:8182/loader -d '
{
"source" : "s3://mi-bucket/data/",
"format" : "csv",
"iamRoleArn" : "arn:aws:iam::123456789012:role/NeptuneLoadRole",
"region" : "us-east-1",
"failOnError" : "FALSE"
}'
🛡️ Seguridad
-
Red privada (VPC) obligatoria.
-
Grupos de seguridad controlan el acceso por puerto (8182).
-
TLS en tránsito.
-
KMS para cifrado de datos en reposo.
-
IAM para autorización (puede integrarse con SIGv4).
📈 Monitoreo y mantenimiento
-
CloudWatch Logs y métricas: conexiones, CPU, latencia, uso de disco.
-
Backups automáticos: Hasta 35 días de retención.
-
Snapshots manuales: Restaurables y exportables.
-
Failover automático entre zonas.
💵 Precios
Se paga por:
-
Tipo y cantidad de instancias (
db.r5.large, etc.) -
Almacenamiento (por GB/mes)
-
Backups adicionales
-
Transferencias de datos
-
Consultas (no por número de vértices o relaciones)
⚖️ Comparación con otros servicios
| Servicio | Tipo de datos | Caso ideal |
|---|---|---|
| Neptune | Grafos (Gremlin/SPARQL) | Relaciones complejas, redes, recomendaciones |
| DynamoDB | Clave-valor | Accesos rápidos sin relaciones complejas |
| DocumentDB | Documental (JSON) | Datos semiestructurados |
| Aurora MySQL | Relacional SQL | Joins complejos, transacciones ACID |
🎓 Preguntas tipo certificación
-
¿Qué motor de grafo soporta Gremlin?
- ✅ Property Graph
-
¿Neptune permite acceso desde Internet público?
- ❌ No, solo desde dentro del VPC
-
¿Qué protocolo de cifrado usa en tránsito?
- ✅ TLS
-
¿Se puede usar con SPARQL y openCypher?
- ✅ Sí, ambas (openCypher en beta)