Navrhujte nejprve podle přístupového vzoru (access pattern), pak zvolte partitioning + správný index/PK tak, aby se každý jednotlivý dotaz dotkl malého ohraničeného výřezu — nikdy neskenoval 10 miliard řádků. Sub-100ms nad 10 miliardami záznamů není o rychlejším disku; je to o tom udělat working set malým.
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
Přístupové vzory řídí vše
Než zvolíte technologii, ptejte se: „Získej posledních 20 objednávek uživatele X“ je point/range dotaz — chcete, aby mu partition a sort key přesně odpovídaly. „Sečti tržby podle regionu za tento měsíc“ je analytický sken — row store je špatný nástroj. Nejdřív si namodelovat dotaz je to, co odděluje návrh, který funguje, od toho, co vypadá rozumně, ale full-scanuje.
