OLTP vs OLAP

Two workloads with opposite shapes — many small transactions against current state, versus large scans across history. The distinction that explains why analytics moved off the production database in the first place.

OLTP Workloads

Many small transactions against current state: point lookups by key, a few rows written, low latency, high concurrency. The shape that explains every design choice an operational database makes.

Q · What does the work an operational database actually does look like, one statement at a time?
OLAP Workloads

Few queries, each reading a large range of history and collapsing it into a handful of numbers. Judged on throughput rather than latency, bound by bytes moved rather than by seeks, and unhelped by almost every index you could add.

Q · What does an analytical query actually ask for, and why does no index make it fast?
OLTP vs OLAP

The two workloads compared on every axis that actually differs — plus an honest account of where the line has blurred, where it has not, and why the distinction still decides your architecture.

Q · Which properties genuinely differ between the two workloads, and which supposed differences are folklore?
Workload Isolation

What an analytical query actually takes from the operational system it runs on — and the specific, honest cases where running it there is still the right call.

Q · What does an analytical query take from the operational system it runs on, and when is that price worth paying?
The OLTP to OLAP Journey

Production database, extraction, transport, raw landing, transformation, analytical storage, BI query — what each hop buys, what it actually promises, and where the shape of the data changes underneath you.

Q · By what route does a committed operational row become a number in an analytical query, and what does each hop along that route promise?
Row vs Column Storage

The same four columns of the same table, written to disk two ways — and exactly which bytes each query is then obliged to move as a result.

Q · If two systems hold identical data, why does the physical arrangement decide which queries are possible?
Columnar Execution

What an engine actually does with `SELECT avg(spend) FROM users WHERE country = 'DE'` once the data is stored by column: chunks opened, blocks skipped, batches decoded, a predicate evaluated into a mask, and one running total.

Q · Once the data is stored by column, what does the engine do with it that a row-at-a-time engine structurally cannot?