All case studies Data platform · 2023

A 100M-row pipeline that finishes before morning

Order, product and price feeds land through RabbitMQ into Laravel workers, get validated and transformed, and settle into partitioned PostgreSQL tables with Redis in front of the hot data.

rows processed
100M+
processing time
-90%
capacity
10x

The problem

Order, product and price feeds arrived as one nightly batch. When a single feed failed, the whole run had to be repeated, and the repeat did not fit in the window before the business day started.

How it works

Feeds land on RabbitMQ and are consumed by Laravel workers that validate, transform and apply business logic in small idempotent batches. A failed batch is retried on its own; it no longer takes the rest of the night with it.

On the storage side, the tables are partitioned and the indexes are built for the queries that actually run, which is what keeps response times flat as the row count crosses a hundred million. Redis sits in front of the hot slice, so reporting stops competing with ingestion for the same pages.

What it bought

Processing time fell by about ninety per cent and the pipeline absorbed roughly ten times the volume on the same hardware.