Tu jefa quiere saber cuánto ha vendido la tienda hoy. Puedes esperar a que acabe el día y sumarlo todo de golpe, o ir sumando cada pedido en cuanto entra. Esa es la diferencia entre batch y streaming, y casi todo lo demás son detalles. Vamos a resolver el mismo problema de las dos formas para que se vea dónde cambia algo y dónde no.
## El ejemplo: una tienda que no existe
Usaremos siempre lo mismo: una tienda online ficticia, con nombres e importes inventados para el post. Hoy ha recibido cuatro pedidos. Cada uno tiene un número, un cliente y un importe:
- Pedido 1001: Lucía, 38 €
- Pedido 1002: Marcos, 15 €
- Pedido 1003: Lucía, 12,5 €
- Pedido 1004: Elena, 30 €
La pregunta es una sola: ¿cuánto hemos vendido? La respuesta correcta es 95,5 €. Será la misma en los dos casos. Lo que cambia es cuándo la tienes.
## Batch: todo de golpe, una vez al día
Batch (procesamiento por lotes; en las ofertas de empleo lo verás como batch processing) consiste en juntar los datos durante un rato y procesarlos todos a la vez. Es la lavadora: no la pones por cada calcetín, esperas a tener colada. En la tienda, los pedidos se van guardando y, por la noche, una tarea programada (un programa que el ordenador lanza solo a una hora fija) los lee todos y calcula el total.
Esa tarea nocturna suele ser un ETL, siglas de Extract, Transform, Load. Es decir: sacar los datos de donde están (extraer), arreglarlos y calcular lo que haga falta (transformar) y dejarlos en su destino, por ejemplo un informe (cargar). La ventaja del batch es que es sencillo: la tarea se enciende, trabaja y se apaga, y si falla la lanzas otra vez. El precio es que hasta que termina, el total de hoy no existe.
## Streaming: pedido a pedido, según llegan
Streaming (procesamiento en flujo, a menudo llamado tiempo real) procesa cada dato en cuanto llega. Es el grifo frente al cubo: en batch llenas el cubo y lo vacías de golpe; en streaming usas el agua mientras cae. Cada cosa que ocurre, como un pedido nuevo, se llama evento. Un programa se queda siempre encendido esperando eventos y, con cada uno, actualiza el total. El tiempo que pasa entre que algo ocurre y lo ves reflejado se llama latencia.
En las ofertas verás también Kafka (Apache Kafka): una plataforma de código abierto (cualquiera puede ver y usar su código) que funciona como buzón de eventos. La tienda deja ahí cada pedido y los programas de streaming lo recogen de ese buzón. De momento te basta con saber que existe y para qué sirve.
## Las mismas ventas, de las dos formas
Aquí van los cuatro pedidos en Python, usando solo lo que ya trae el lenguaje (esto lo practicamos en profundidad en la plataforma). El código es solo para leer: no hace falta instalar ni ejecutar nada. Cada pedido es un diccionario: un conjunto de pares nombre-valor. `total_batch` recibe la lista entera y suma una sola vez: `sum(... for ...)` es una suma que recorre la lista y toma el importe de cada pedido. `llegan` es un generador: una función con `yield` que entrega los pedidos de uno en uno, como si fueran entrando en la tienda. El bucle `for` los recibe según salen y actualiza el total en cada vuelta con `+=`, que significa acumular: suma el importe al total que ya había.
1pedidos = [2 {"id": 1001, "cliente": "Lucía", "importe": 38.0},3 {"id": 1002, "cliente": "Marcos", "importe": 15.0},4 {"id": 1003, "cliente": "Lucía", "importe": 12.5},5 {"id": 1004, "cliente": "Elena", "importe": 30.0},6]789def total_batch(lote):10 # Todo de golpe: la lista completa y una sola suma11 return sum(p["importe"] for p in lote)121314def llegan(lote):15 # Entrega los pedidos de uno en uno, como si entraran en la tienda16 for p in lote:17 yield p181920print("BATCH (al cierre):", len(pedidos), "pedidos, total", total_batch(pedidos), "€")2122print("STREAMING:")23total = 0.024for p in llegan(pedidos):25 total += p["importe"]26 print(" pedido", p["id"], "-> total acumulado", total, "€")
Salida: "BATCH (al cierre): 4 pedidos, total 95.5 €" y, en streaming, un total acumulado tras cada pedido: 38.0, 53.0, 65.5 y 95.5 €.
Fíjate en el último número. El batch da 95,5 € y el streaming termina en 95,5 €: mismo resultado (en la salida verás 95.5 porque Python escribe el punto como separador decimal; es el mismo número). La diferencia está en el camino. El batch te da una respuesta, al final. El streaming te da cuatro, y tras el primer pedido ya sabías que llevabas 38 €.
Nuestro streaming es una simulación: los pedidos ya estaban en una lista. En uno real el programa se queda esperando y no sabe cuándo acabará el flujo, porque no acaba. Por eso no puede hacer una suma final como el batch: tiene que ir guardando el total y retocarlo con cada evento.
## Cuál elijo yo
| Pregunta | Batch | Streaming |
|---|---|---|
| Cuándo procesa | Una vez, a hora fija | Al llegar cada dato |
| Qué procesa | Todo el lote junto | Un evento cada vez |
| Cuándo sabes el total | Al acabar la tarea | En todo momento |
| Cómo está el sistema | Encendido un rato | Encendido siempre |
Mi postura: empieza siempre por batch. Es más simple, es más barato de mantener y casi todas las preguntas del negocio, como "cuánto vendimos ayer" o "qué producto subió esta semana", no necesitan la respuesta en segundos. El streaming merece la pena cuando alguien tiene que actuar en el momento: bloquear un pago sospechoso antes de que se complete, o avisar de que se agota el stock mientras aún hay gente comprando. Montar streaming para un informe que se lee cada mañana es poner un manguera de bomberos para regar una maceta.
Antes de elegir, hazte esta pregunta: ¿qué haría alguien distinto si tuviera el dato ahora en vez de mañana? Si la respuesta es "nada", es un caso de batch. Y cuando en una entrevista te pregunten por la diferencia, cuenta el ejemplo de la tienda: se entiende más rápido que cualquier definición.
En resumen: batch junta los datos y los procesa de golpe cada cierto tiempo; streaming los procesa uno a uno según llegan. Con los mismos pedidos acaban en el mismo total, pero con distinta latencia. Para practicar, añade un quinto pedido a la lista y comprueba que las dos formas suman lo mismo. Luego imagina que el batch se lanza a las 23:00 y que ese pedido entra a las 23:59: en cuál de los dos mundos aparece en el total de hoy.