access pattern પહેલાં ડિઝાઇન કરો, પછી partitioning + યોગ્ય index/PK પસંદ કરો જેથી કોઈપણ એક query નાનો, bounded slice સ્પર્શે — ક્યારેય 10B rows scan ન કરે. 10 અબજ records પર sub-100ms એ ઝડપી disk વિશે નથી; તે working set ને tiny બનાવવા વિશે છે.
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 બધું ચલાવે છે
tech પસંદ કરતાં પહેલાં પૂછો: "User X ના છેલ્લા 20 orders લાવો" એ point/range query છે — તમે ઇચ્છો છો કે partition અને sort key તેને બરાબર match કરે. "આ મહિને region પ્રમાણે revenue sum કરો" એ analytical scan છે — row store ખોટું tool છે. query ને પહેલાં model કરવું એ જ કામ કરતી ડિઝાઇન ને એવી ડિઝાઇનથી અલગ કરે છે જે વાજબી લાગે પણ full-scan કરે.
