Ir al contenido
wannacode

OLTP y OLAP

En resumen: OLTP son las muchas consultas pequeñas de una aplicación como una caja registradora, y OLAP son las pocas consultas grandes de informes que leen todas las filas.

Problema

La caja y la contabilidad

La base de datos de la tienda hace a la vez dos trabajos muy distintos. El cliente en la caja pregunta por un pedido y quiere la respuesta enseguida. El dueño el lunes por la mañana pregunta «cuánto vendimos por mes y por categoría», y eso necesita todos los pedidos del año.

Las primeras son miles por minuto, pequeñas y por clave. Las segundas son unas pocas al día, pero cada una lee todo. Una misma base de datos rara vez es buena en las dos cosas. Por eso hay distintos tipos de bases de datos, y de ellos trata este módulo.

La idea

OLTP: muchas consultas pequeñas

OLTP (online transaction processing, procesamiento de transacciones en línea) es el trabajo de la caja: leer o cambiar unas pocas filas que conoces por la clave. Los productos del pedido 42:

SQLbase de datos: tienda

El plan muestra que la base de datos no lee toda la tabla. Busca (SEARCH) con el índice de la clave primaria y va directa a las dos filas:

SQLbase de datos: tienda

Las consultas OLTP también escriben. Una compra es una transacción: el pedido, su línea y el stock se escriben juntos o no se escribe nada:

SQLbase de datos: tienda

Pruébalo

El cliente pregunta

El cliente llama por el pedido 15. Muestra su estado y su fecha (las columnas status y ordered_at).

SQLbase de datos: tienda

La idea

OLAP: pocas consultas grandes

OLAP (online analytical processing, procesamiento analítico en línea) es el trabajo del análisis: reunir, agrupar y comparar muchas filas. Los ingresos por mes de 2026:

SQLbase de datos: tienda

Una clave no ayuda aquí. Necesita todas las filas de pedidos, así que el plan empieza con SCAN:

SQLbase de datos: tienda

Con 152 filas es instantáneo. Con 50 millones de filas el informe lee gigabytes y carga el disco, la memoria y el procesador durante minutos. Mientras tanto, la caja espera. Y un índice no ayuda, porque el informe quiere todo de todos modos.

La idea

El almacén de datos

La solución es que los informes no toquen la base de datos del sitio. Cada noche un programa copia los datos a una base de datos aparte para el análisis, llamada almacén de datos (data warehouse). La copia se llama ETL: extract, transform, load (extraer, transformar, cargar).

Durante la transformación las tablas suelen fundirse en una tabla ancha: todo sobre una venta en una fila. Eso es desnormalización, que en la base de datos del sitio sería un error: el nombre del producto se repite en cada fila. Aquí es a propósito, porque los datos solo se leen y el informe no necesita JOIN. CREATE TABLE … AS SELECT crea una tabla nueva a partir del resultado de una consulta:

SQLbase de datos: tienda

Los pedidos cancelados se quitan ya al copiar, para que los informes no tengan que acordarse de ellos.

Más precisamente, para curiosos

Los almacenes de datos reales (ClickHouse, BigQuery, Snowflake, Amazon Redshift) guardan los datos por columnas, no por filas. Un informe de ingresos lee solo las columnas day, category y amount y se salta el resto. Para eso sirve la lección sobre las bases de datos columnares. La tabla ancha suele ser una «tabla de hechos» con pequeñas tablas de consulta a su alrededor (dimensiones: fecha, producto, tienda), y el conjunto se llama esquema en estrella.

Pruébalo

Un informe por categoría

De la tabla sales: los ingresos por categoría de 2026 (las columnas category y revenue, redondeados al céntimo), del mayor hacia abajo.

SQLbase de datos: tienda

Ejercicio

Cuántos pedidos por ciudad

De la tabla sales: cuántos pedidos hay de cada ciudad (las columnas city y orders), de más a menos y, en caso de empate, por el nombre de la ciudad. Un cliente sin ciudad es una fila con NULL.

SQLbase de datos: tienda

La idea

El tipo de datos y el tipo de pregunta

OLTP y OLAP son la primera división. Las demás salen de cómo son los datos y de qué les preguntas. Cada lección del módulo es una pareja así, y la mayoría tienen un simulador de la base de datos real en el navegador:

Los datos y la pregunta Tipo de base de datos Ejemplos
Obtengo por clave, rápido, a menudo clave-valor Redis, Valkey, DynamoDB
Un documento entero con partes anidadas documental MongoDB
Qué ocurrió y en qué orden flujo de eventos Kafka, Redpanda
Quién está conectado con quién, en cuántos pasos de grafos Neo4j
Sumas sobre millones de filas, a lo largo del tiempo columnar, series temporales ClickHouse, TimescaleDB
Palabras en un texto búsqueda de texto completo Elasticsearch, OpenSearch
Parecido en significado vectorial pgvector, Qdrant
Más datos y consultas de los que cabe en un servidor clúster replicación, sharding

Al final está la lección de cómo elegir. La respuesta casi siempre es: una base de datos relacional para la verdad y otro tipo a su lado solo para la pregunta en la que ella es débil.

Test

Ponte a prueba

1. ¿Cuál de estas es una consulta OLTP?
2. En la tabla ancha sales cada fila es un producto de un pedido. ¿Cómo cuentas los pedidos?
3. ¿Por qué los informes normalmente no se ejecutan en la base de datos con la que trabaja el sitio web?

Creado por Ivo Gergov como parte de la campaña de Evo Tech por una educación accesible en programación ·