DynamoDB: Qué es, Principales Usos y un Ejemplo Práctico
¿Qué es DynamoDB?
DynamoDB es una base de datos NoSQL completamente gestionada ofrecida por Amazon Web Services (AWS). Diseñada para manejar aplicaciones de alto rendimiento, es ideal para escenarios donde se requieren consultas rápidas y escalabilidad automática.
A diferencia de las bases de datos relacionales, DynamoDB utiliza un modelo de datos flexible basado en tablas con atributos clave y sin esquema fijo, lo que lo hace perfecto para aplicaciones modernas con necesidades cambiantes.
Principales Usos de DynamoDB
DynamoDB se utiliza ampliamente en diversas aplicaciones y sectores. Algunos de sus casos de uso más destacados incluyen:
- Aplicaciones Web y Móviles: Para almacenar información de usuarios, sesiones y preferencias en tiempo real.
- Gaming: Seguimiento de puntuaciones, estadísticas de jugadores y tablas de clasificación.
- E-commerce: Gestión de inventarios, catálogos de productos y datos de transacciones.
- IoT (Internet de las Cosas): Almacenamiento y análisis de datos de dispositivos conectados.
- Análisis en Tiempo Real: Procesamiento de datos para dashboards y reportes instantáneos.
Ventajas de DynamoDB
- Escalabilidad Automática: Ajusta la capacidad de lectura/escritura según la carga.
- Baja Latencia: Garantiza tiempos de respuesta rápidos para consultas, incluso bajo alta demanda.
- Modelo de Pago por Uso: Permite ahorrar costos al pagar solo por las operaciones realizadas.
- Alta Disponibilidad: Diseñado para garantizar disponibilidad y durabilidad de los datos.
- Integración Nativa con AWS: Compatible con servicios como Lambda, API Gateway y CloudWatch.
Ejemplo Práctico: Gestión de Inventario para un E-commerce
Descripción del Proyecto
Crearemos una aplicación sencilla que permite:
- Registrar nuevos productos en el inventario.
- Consultar la lista de productos disponibles.
- Actualizar la cantidad de productos en existencia.
Utilizaremos AWS Lambda para la lógica del backend y DynamoDB como base de datos para almacenar la información del inventario.
Configuración del Proyecto
1. Crear una Tabla en DynamoDB
En la consola de AWS:
- Ve a DynamoDB y selecciona «Crear tabla».
- Configura:
- Nombre de la tabla:
InventoryTable
. - Clave primaria:
productId
(tipo String).
- Nombre de la tabla:
- Guarda la configuración.
2. Configuración del Backend con AWS Lambda
Archivo addProduct.js
: Crear un Producto
const AWS = require('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports.handler = async (event) => {
const data = JSON.parse(event.body);
const params = {
TableName: 'InventoryTable',
Item: {
productId: data.productId,
name: data.name,
quantity: data.quantity,
price: data.price,
},
};
try {
await dynamoDb.put(params).promise();
return {
statusCode: 201,
body: JSON.stringify({ message: 'Producto añadido al inventario', product: params.Item }),
};
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify({ error: 'Error al añadir producto' }),
};
}
};
Archivo getProducts.js
: Consultar Productos
module.exports.handler = async () => {
const params = {
TableName: 'InventoryTable',
};
try {
const result = await dynamoDb.scan(params).promise();
return {
statusCode: 200,
body: JSON.stringify(result.Items),
};
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify({ error: 'Error al obtener productos' }),
};
}
};
Archivo updateProduct.js
: Actualizar Cantidad de Productos
module.exports.handler = async (event) => {
const data = JSON.parse(event.body);
const params = {
TableName: 'InventoryTable',
Key: { productId: event.pathParameters.id },
UpdateExpression: 'set quantity = :quantity',
ExpressionAttributeValues: {
':quantity': data.quantity,
},
ReturnValues: 'UPDATED_NEW',
};
try {
const result = await dynamoDb.update(params).promise();
return {
statusCode: 200,
body: JSON.stringify({ message: 'Cantidad actualizada', result }),
};
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify({ error: 'Error al actualizar cantidad' }),
};
}
};
3. Desplegar con Serverless Framework
Archivo serverless.yml
: Configuración del Proyecto
service: inventory-api
provider:
name: aws
runtime: nodejs18.x
functions:
addProduct:
handler: addProduct.handler
events:
- http:
path: products
method: post
getProducts:
handler: getProducts.handler
events:
- http:
path: products
method: get
updateProduct:
handler: updateProduct.handler
events:
- http:
path: products/{id}
method: put
Ejecutar:
serverless deploy
Conclusión
DynamoDB es una solución poderosa para aplicaciones modernas que necesitan escalabilidad, rendimiento y flexibilidad. Su integración con AWS Lambda facilita la creación de sistemas eficientes y sin servidores, como en nuestro ejemplo de gestión de inventario.
Adoptar DynamoDB en proyectos reales permite a los desarrolladores manejar datos de forma eficiente y centrarse en la lógica de negocio, aprovechando al máximo las ventajas de la nube.
Referencias: