0Pricing
SQL Academy · Lección

Cuándo preagregar

Decida entre la agregación en tiempo real, las vistas materializadas y OLAP posterior según la frescura y el coste.

Cuándo preagregar es una lección gratuita de SQL 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 SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

Tres estrategias para consultas agregadas

  • En vivo — recalcular cada vez
  • Materializada — almacenar y actualizar periódicamente
  • Activada por triggers/incremental — actualizar incrementalmente con cada cambio

Agregación en vivo

Simple y siempre actualizada:

SELECT user_id, COUNT(*) FROM orders WHERE status = 'paid' GROUP BY user_id;

Cuándo es suficiente la agregación en vivo

La consulta es suficientemente rápida (buenos índices, resultado pequeño y llamadas poco frecuentes). Use la opción en vivo de forma predeterminada y optimice solo cuando mida un problema real.

Agregación materializada

Para informes costosos que deban estar «razonablemente actualizados»:

CREATE MATERIALIZED VIEW user_revenue_30d AS
SELECT user_id, SUM(total) AS revenue
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days'
GROUP BY user_id;

-- Refresh nightly:
REFRESH MATERIALIZED VIEW CONCURRENTLY user_revenue_30d;

Agregación activada por triggers / incremental

Para paneles en tiempo real, mantenga una tabla de resumen con triggers:

CREATE TABLE user_summary (
  user_id BIGINT PRIMARY KEY,
  order_count INT NOT NULL DEFAULT 0,
  revenue NUMERIC(12,2) NOT NULL DEFAULT 0
);

CREATE FUNCTION incr_summary() RETURNS TRIGGER AS $$
BEGIN
  INSERT INTO user_summary (user_id, order_count, revenue)
  VALUES (NEW.user_id, 1, NEW.total)
  ON CONFLICT (user_id) DO UPDATE
  SET order_count = user_summary.order_count + 1,
      revenue     = user_summary.revenue + EXCLUDED.revenue;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_summary AFTER INSERT ON orders
FOR EACH ROW EXECUTE FUNCTION incr_summary();

Compromisos

EstrategiaActualizaciónCoste de escrituraCoste de lectura
En vivoInstantáneaNingunoAlto
MaterializadaDesactualizadaActualización por lotesBajo
Activada por triggersInstantáneaPor escrituraBajo

Elija según la proporción de lecturas y escrituras

  • Muchas escrituras y lecturas ocasionales → en vivo (o vista materializada por lotes)
  • Muchas lecturas y escrituras moderadas → vista materializada
  • Muchas lecturas y escrituras, con actualización crítica → resumen activado por triggers

Preagregación externa

Para análisis a escala de almacén de datos, delegue la agregación en:

  • Bases de datos OLAP (ClickHouse, Druid)
  • Modelos de dbt en un almacén de datos independiente
  • Agregaciones continuas de TimescaleDB (extensión de Postgres)

Tablas de resumen frente a vistas materializadas

Las tablas de resumen personalizadas permiten actualizar de forma incremental; las vistas materializadas obligan a realizar una actualización completa. Sopese el esfuerzo de desarrollo frente a la simplicidad operativa.

Evite los triggers en tablas con mucha actividad

Los resúmenes basados en triggers añaden latencia de escritura a cada operación. Para tablas de alta frecuencia (eventos, métricas), prefiera la actualización por lotes de una vista materializada.

Cuidado con la invalidación de caché

«Solo hay dos cosas difíciles en informática». Los resúmenes activados por triggers son una caché. Los errores en ellos se manifiestan como cifras incorrectas en los paneles. Añada un trabajo diario de conciliación que vuelva a calcular los datos a partir del origen.

Materialice canalizaciones de varias etapas

Encadene vistas materializadas: la etapa 1 agrega eventos y la etapa 2 agrega la etapa 1. Actualícelas en orden.

Recapitulación

Realice preagregaciones cuando las lecturas dominen el coste.

  • En vivo → lo más sencillo y siempre actualizado
  • Vista materializada → consulta costosa, se toleran datos desactualizados
  • Resumen activado por triggers → siempre actualizado, pero aumenta el coste de escritura
  • Elija según su perfil de lecturas y escrituras

Comprobación rápida

Dispone de un panel en tiempo real que debe mostrar los ingresos de los usuarios actualizados al segundo. ¿Qué estrategia se adapta mejor?

Preguntas frecuentes

¿La lección «Cuándo preagregar» es gratis?

Sí — el texto completo de «Cuándo preagregar» 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 SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Cuándo preagregar»?

Decida entre la agregación en tiempo real, las vistas materializadas y OLAP posterior según la frescura y el coste. Practicas SQL 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 SQL Academy?

No se requiere experiencia previa. SQL 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 preagregar»?

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 SQL Academy?

Sí. Cada lección de SQL 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. Vistas simples: reutilización lógica
  2. Vistas actualizables y triggers INSTEAD OF
  3. Vistas materializadas y estrategias de REFRESH
  4. Cuándo preagregar
← Volver a SQL Academy