Designa för åtkomstmönstret först, välj sedan partitionering + rätt index/PK så att varje enskild fråga rör en liten, begränsad del — aldrig skannar 10B rader. Under 100ms över 10 miljarder poster handlar inte om en snabbare disk; det handlar om att göra working set:et litet.
Query ─▶ Router ──▶ Partition (by tenant/time) ──▶ Index/PK lookup ─▶ ~thousands of rows
│ (prune 99.9% of data) (B-tree / sort key)
└─▶ Cache (Redis) ─▶ hit? return in <5ms
miss ▼
Columnar store (ClickHouse) for aggregates / scans
Åtkomstmönster styr allt
Innan du väljer teknik, fråga: "Hämta användare X:s senaste 20 ordrar" är en point/range-fråga — du vill att partitionen och sort key matchar den exakt. "Summera intäkt per region denna månad" är en analytisk scan — en row store är fel verktyg. Att modellera frågan först är det som skiljer en design som fungerar från en som ser rimlig ut men full-scannar.
