पहले access pattern के लिए डिज़ाइन करें, फिर partitioning + सही index/PK चुनें ताकि कोई भी अकेली query एक छोटा, सीमित slice छुए — कभी 10 अरब rows scan न करे। 10 अरब records पर 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 चुनने से पहले पूछें: "यूज़र X के अंतिम 20 orders लाओ" एक point/range query है — आप चाहते हैं partition और sort key उससे बिल्कुल मेल खाएं। "इस महीने region के हिसाब से revenue का sum" एक analytical scan है — एक row store गलत उपकरण है। पहले query को model करना ही एक ऐसे डिज़ाइन को अलग करता है जो काम करता है और एक जो उचित दिखता है पर full-scans करता है।
