Aplicación del Computed Pattern en Bases de Datos MongoDB
Clase 20 de 22 • Curso de Modelado de Datos en MongoDB
Resumen
¿Qué es el patrón "computed pattern" y cómo se aplica?
El "computed pattern" ofrece una manera eficiente y dinámica de precalcular valores en base de datos, evitando recálculos costosos en cada consulta. Es especialmente útil en sistemas donde se necesita calcular totales o promedios, como en e-commerce o sistemas de evaluación.
Creando una estructura dinámica para órdenes de compra
Imaginemos un sistema de e-commerce. Aquí, al crear una orden de compra, inicialmente solo incluimos:
- El usuario que crea la orden.
- La fecha de creación.
- Los ítems, que comienzan vacíos para llenarse dinámicamente.
Este enfoque simula un carrito de compras donde los usuarios agregan productos gradualmente en lugar de todos a la vez.
Introduciendo el campo total
Un campo fundamental es el total de la orden. Al operaciones como el "push" para agregar ítems, calculamos inmediatamente el total, evitando las computaciones durante las consultas de lectura. Por ejemplo, si se añade un producto a $12 con una cantidad de 1, el total automáticamente se incrementa por $12.
db.orders.updateOne(
{ "_id": ObjectId("orden_id") },
{
$push: {
items: {
producto: "producto1",
precio: 12,
cantidad: 1
}
},
$inc: { total: 12 } // precio * cantidad
}
);
Actualizando valores de manera eficiente
Cada vez que se añade un nuevo ítem, el sistema:
- Usa
$push
para insertar el producto en el array de ítems. - Usa
$inc
para calcular e incrementar el total.
Este pre-cálculo permite que, al momento de consultar el total, el valor exacto ya esté disponible, optimizando las consultas de lectura.
¿Cuándo es efectivo aplicar el patrón computed pattern?
Este patrón es crucial cuando:
- La lectura es más frecuente que la escritura.
- Se desean evitar cálculos en tiempo real durante la lectura.
- Se necesita optimizar el uso de CPU y recursos de base de datos.
Se ve en contextos diversos, como calcular el puntaje total de exámenes en sistemas educativos, o el revenue de una película proyectada en múltiples salas.
Ejemplo de caso de uso: sistema educativo
En un sistema de evaluaciones, como un examen nacional, en lugar de calcular el puntaje del examen en cada consulta, se precalcula cuando el estudiante termina el examen. Así, las listas de resultados se presentan rápidamente al estar ya precalculados.
Ejemplo de caso de uso: industria del entretenimiento
Para una película exhibida en diferentes teatros, el revenue de cada sesión se precalcula y se suma al total de la película al finalizar cada sesión, evitando sumar manualmente cada vez que hay una consulta de ingresos.
Consejos para implementar el patrón computed pattern
-
Analizar frecuencias de operaciones: Antes de aplicar el patrón, evalúa si tu aplicación realiza más operaciones de lectura que de escritura.
-
Optimiza reglas de negocio: Implementa reglas en tus servicios backend — ya sea en Python, JavaScript, .NET, Java, etc. — para que calculen valores y actualicen los registros conforme se recibe nueva información.
-
Escalabilidad: Considera este patrón si deseas escalar tu aplicación. El precálculo reduce la carga de consultas intensivas, siendo un enfoque eficiente en bases de datos de grandes volúmenes.
Este enfoque inteligente no solo ahorra tiempo, sino que también mejora el rendimiento, permitiéndote enfocarte en ofrecer una experiencia de usuario rápida y ágil. Así que, ¡no dudes en probarlo en tus proyectos y descubre su potencia!