ਪਹਿਲਾਂ access pattern ਲਈ design ਕਰੋ, ਫਿਰ partitioning + ਸਹੀ index/PK ਚੁਣੋ ਤਾਂ ਜੋ ਕੋਈ ਵੀ single query ਇੱਕ ਛੋਟੀ, bounded slice ਨੂੰ ਛੂਹੇ — ਕਦੇ 10 ਅਰਬ rows scan ਨਾ ਕਰੇ। 10 ਅਰਬ records ਉੱਤੇ Sub-100ms ਇੱਕ ਤੇਜ਼ disk ਬਾਰੇ ਨਹੀਂ ਹੈ; ਇਹ working set ਨੂੰ ਨਿੱਕਾ ਬਣਾਉਣ ਬਾਰੇ ਹੈ।
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 ਕਰਨਾ ਹੀ ਓਹ ਹੈ ਜੋ ਇੱਕ ਕੰਮ ਕਰਨ ਵਾਲੇ design ਨੂੰ ਓਸ ਤੋਂ ਵੱਖ ਕਰਦਾ ਹੈ ਜੋ ਵਾਜਬ ਲੱਗਦਾ ਹੈ ਪਰ full-scan ਕਰਦਾ ਹੈ।
