Design for access pattern først, vælg derefter partitionering + den rette index/PK, så enhver enkelt forespørgsel rører en lille, afgrænset skive — aldrig scanner 10B rows. Sub-100ms over 10 milliarder records handler ikke om en hurtigere disk; det handler om at gøre working set'et lille.
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
Access patterns styrer alt
Før du vælger teknologi, spørg: "Hent bruger X's sidste 20 ordrer" er en point/range-forespørgsel — du vil have partition- og sort key til at matche den nøjagtigt. "Summér omsætning pr. region denne måned" er en analytisk scan — en row store er det forkerte værktøj. At modellere forespørgslen først er det, der adskiller et design der virker, fra et der ser rimeligt ud men full-scanner.
