CAPÍTULO 8: OLTP vs OLAP - Sistemas transaccionales y analíticos¶
Dos Paradigmas Fundamentales
Los sistemas de información empresariales se dividen en dos categorías fundamentales: OLTP (sistemas transaccionales para operaciones) y OLAP (sistemas analíticos para toma de decisiones). Comprender sus diferencias es crítico para arquitecturas de datos efectivas.
8.1. OLTP (Online Transaction Processing)¶
Definición
OLTP son sistemas optimizados para procesar grandes volúmenes de transacciones cortas y frecuentes, garantizando ACID (Atomicidad, Consistencia, Aislamiento, Durabilidad).
Características de OLTP:
| Característica | Descripción |
|---|---|
| Objetivo | Operaciones diarias del negocio (INSERT, UPDATE, DELETE) |
| Usuarios | Miles-millones de usuarios concurrentes |
| Transacciones | Cortas, frecuentes (milisegundos) |
| Volumen escritura | ⬆️ ALTO (muchas escrituras) |
| Volumen lectura | ➡️ Medio (consultas específicas por clave) |
| Queries | Simples, predecibles (SELECT * WHERE id=?) |
| Datos | Actuales, detallados, normalizados |
| Modelo | Normalizado (3NF) para evitar redundancia |
| Storage | Row-based (filas completas) |
| Integridad | ACID estricto, constraints, foreign keys |
| Backup | Continuo (transaction log) |
| Ejemplos | Sistemas bancarios, e-commerce, reservas |
Casos de uso OLTP:
- 🏦 Banca: Transferencias, retiros, depósitos
- 🛒 E-commerce: Carrito de compra, checkout, inventario
- ✈️ Reservas: Hoteles, vuelos, entradas
- 📱 Apps móviles: Redes sociales, mensajería
- 🏥 Hospitales: Historiales médicos, citas
Ejemplo: base de datos OLTP (e-commerce):
Schema normalizado (3NF):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | |
Operaciones OLTP típicas:
Características de estas queries:
- ✅ Simples: Afectan pocas filas (1-100)
- ✅ Indexadas: Usan PRIMARY KEY o índices
- ✅ Rápidas: < 10ms típicamente
- ✅ ACID: Transacciones con BEGIN/COMMIT
- ✅ Concurrentes: Locks a nivel de fila
8.2. OLAP (Online Analytical Processing)¶
Definición
OLAP son sistemas optimizados para análisis y consultas complejas sobre grandes volúmenes de datos históricos, con énfasis en agregaciones y multidimensionalidad.
Características de OLAP:
| Característica | Descripción |
|---|---|
| Objetivo | Análisis, reporting, inteligencia de negocio |
| Usuarios | Decenas-cientos analistas/ejecutivos |
| Queries | Largas, complejas (segundos-minutos) |
| Volumen escritura | ⬇️ BAJO (bulk loads periódicos) |
| Volumen lectura | ⬆️ ALTO (scans completos, agregaciones) |
| Queries | Complejas (JOIN múltiples, GROUP BY, aggregations) |
| Datos | Históricos, agregados, desnormalizados |
| Modelo | Star/Snowflake schema (dimensional) |
| Storage | Column-based (columnas completas) |
| Integridad | Relajada (eventual consistency OK) |
| Backup | Snapshots periódicos |
| Ejemplos | Data Warehouses, BI dashboards |
Casos de uso OLAP:
- 📊 Reportes ejecutivos: KPIs, dashboards
- 📈 Análisis de tendencias: Ventas por mes/año
- 🔍 Data mining: Segmentación de clientes
- 🎯 Forecasting: Predicción de demanda
- 💰 Análisis financiero: P&L, balance sheets
8.3. OLTP vs OLAP: comparación completa¶
graph TD
subgraph OLTP[OLTP - Transaccional]
A1[Aplicaciones<br/>Web/Móvil] --> B1[(Base OLTP<br/>Normalizada)]
B1 --> C1[Operaciones<br/>Diarias]
end
subgraph ETL[ETL Process]
D[Extract] --> E[Transform]
E --> F[Load]
end
subgraph OLAP[OLAP - Analítico]
G1[(Data Warehouse<br/>Star Schema)] --> H1[Análisis<br/>BI]
H1 --> I1[Dashboards<br/>Reportes]
end
B1 -.ETL Nightly.-> D
F --> G1
style OLTP fill:#E3F2FD
style ETL fill:#FFF3E0
style OLAP fill:#E8F5E9
| Aspecto | OLTP | OLAP |
|---|---|---|
| Propósito | Operaciones diarias | Análisis y decisiones |
| Workload | INSERT, UPDATE, DELETE | SELECT complejos |
| Performance | Milisegundos | Segundos a minutos |
| Modelo de datos | Normalizado (3NF) | Dimensional (Star/Snowflake) |
| Orientación | Aplicación | Análisis |
| Volumen queries | ⬆️ Miles/segundo | ⬇️ Decenas/hora |
| Complejidad queries | ⬇️ Simples (índices) | ⬆️ Complejas (scans, agregaciones) |
| Datos históricos | ❌ Solo actuales | ✅ Años de historia |
| Tamaño DB | GB a TB | TB a PB |
| Escrituras | Continuas | Batch (ETL) |
| Lecturas | Por clave (índice) | Rangos, scans completos |
| Usuarios concurrentes | ⬆️ Miles | ⬇️ Cientos |
| Ejemplo de query | "Dame la orden #12345" | "Ventas totales por región y mes en 2023" |
| Storage | Row-oriented (PostgreSQL, MySQL) | Column-oriented (Redshift, BigQuery) |
| Diseño para | Alta transaccionalidad | Análisis multidimensional |
| Optimización | Locks, índices B-tree | Particionamiento, compresión columnar |
| Backup/Recovery | Crítico (transacciones) | Menos crítico (reconstruible desde OLTP) |
8.4. Modelado dimensional: Star Schema¶
Star Schema
El Star Schema es el modelo dimensional más común, con una tabla de hechos central rodeada de tablas de dimensiones.
Componentes:
1. Tabla de hechos (Fact Table):
- Contiene métricas/medidas numéricas (ventas, cantidad, costos)
- Foreign keys a dimensiones
- Grano (granularidad): Cada fila representa un evento/transacción
- Gran volumen (millones-billones de filas)
2. Tablas de Dimensiones (Dimension Tables):
- Atributos descriptivos (quién, qué, dónde, cuándo)
- Primary key (surrogate key)
- Desnormalizadas (pueden tener redundancia)
- Menor volumen (miles-millones de filas)
Ejemplo: Star Schema de ventas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | |
Visualización Star Schema:
graph TD
A[dim_time<br/>time_key*<br/>date<br/>month<br/>quarter<br/>year] --> E
B[dim_product<br/>product_key*<br/>sku<br/>name<br/>category<br/>brand] --> E
C[dim_customer<br/>customer_key*<br/>name<br/>city<br/>segment<br/>ltv] --> E
D[dim_store<br/>store_key*<br/>name<br/>region<br/>type] --> E
F[dim_promotion<br/>promotion_key*<br/>name<br/>discount] --> E
E[fact_sales<br/>time_key FK<br/>product_key FK<br/>customer_key FK<br/>store_key FK<br/>promotion_key FK<br/>---<br/>quantity<br/>sales_amount<br/>cost_amount<br/>profit_amount]
style E fill:#FFD93D
style A fill:#E3F2FD
style B fill:#E3F2FD
style C fill:#E3F2FD
style D fill:#E3F2FD
style F fill:#E3F2FD
Queries OLAP sobre Star Schema:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | |
Características de estas queries:
- ❌ Complejas: Múltiples JOINs, GROUP BY, ventanas
- ❌ Lentas: Segundos-minutos (vs milisegundos en OLTP)
- ✅ Agregaciones: SUM, COUNT, AVG sobre millones de filas
- ✅ Análisis temporal: Comparaciones año/año, tendencias
- ✅ Multidimensional: Slice & dice por producto/cliente/tiempo
8.5. Slowly Changing Dimensions (SCD)¶
SCD: Manejo de Cambios en Dimensiones
Las dimensiones cambian con el tiempo (ej: cliente se muda, producto cambia de precio). SCD define cómo manejar estos cambios.
Tipos de SCD:
| Tipo | Estrategia | Descripción | Uso |
|---|---|---|---|
| Type 0 | No cambiar | Mantener valor original siempre | Atributos inmutables (fecha nacimiento) |
| Type 1 | Sobrescribir | Actualizar y perder historia | Correcciones (typos), datos no críticos |
| Type 2 | Nueva fila** | Crear nueva versión con fechas efectivas | Más común, mantiene historia completa |
| Type 3 | Nueva columna | Mantener valor actual y anterior | Solo un cambio histórico (ej: previous_city) |
| Type 4 | Mini-dimension | Tabla separada para atributos que cambian | Alternativa a Type 2 |
| Type 6 | Híbrido (1+2+3) | Combina Type 1, 2 y 3 | Máxima flexibilidad |
SCD Type 2: ejemplo completo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | |
8.6. ETL: de OLTP a OLAP¶
ETL Process
ETL (Extract, Transform, Load) es el proceso de mover datos desde sistemas OLTP a Data Warehouse OLAP.
Proceso ETL completo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 | |
8.7. Tecnologías OLTP vs OLAP¶
Bases de datos OLTP:
| DB | Tipo | Características | Casos de Uso |
|---|---|---|---|
| PostgreSQL | Relacional | ACID fuerte, extensible, JSON support | Apps web, SaaS |
| MySQL | Relacional | Rápido reads, popular, fácil | WordPress, e-commerce |
| Oracle | Relacional | Enterprise, alta disponibilidad | Bancos, Fortune 500 |
| SQL Server | Relacional | Integración Microsoft stack | Empresas Windows |
| PostgreSQL | NoSQL Document | Flexible schema, escala horizontal | Apps real-time |
Bases de datos OLAP (Data Warehouses):
| DWH | Storage | Características | Pricing |
|---|---|---|---|
| Amazon Redshift | Columnar (ParAccel) | Escala a petabytes, integración AWS | Por hora cluster |
| Google BigQuery | Columnar | Serverless, SQL estándar, ML integrado | Por TB escaneado |
| Snowflake | Columnar | Multi-cloud, separación compute/storage | Por segundo compute |
| Azure Synapse | Columnar (MPP) | Integración Azure, Spark incluido | Por DWU o serverless |
| Apache Hive | Parquet/ORC en HDFS | Open-source, sobre Hadoop | Infra propia |
| ClickHouse | Columnar | Ultrarrápido, time-series | Open-source |
Conclusión¶
Resumen OLTP vs OLAP
OLTP: - 🎯 Operaciones transaccionales día a día - ⚡ Sub-segundo response time - 🔒 ACID estricto - 📐 Normalizado (3NF) - 📝 Row-oriented storage
OLAP: - 📊 Análisis y reporting - 🕐 Segundos-minutos response time - 🔓 Eventually consistent OK - ⭐ Star/Snowflake schema - 📊 Column-oriented storage
Arquitectura Moderna:
Mejores Prácticas
- ✅ No mezclar OLTP y OLAP en la misma DB
- ✅ Usar ETL incremental (no full refresh diario)
- ✅ Implementar SCD Type 2 para dimensiones críticas
- ✅ Particionar fact tables por fecha
- ✅ Crear tablas agregadas para queries frecuentes
- ✅ Monitorear queries lentos y optimizar
- ✅ Documentar lógica de negocio en transformaciones
Fin del Capítulo 8: OLTP vs OLAP