Önce access pattern için tasarlayın, sonra partitioning + doğru index/PK'yı seçin, böylece herhangi bir tek sorgu küçük, sınırlı bir dilime dokunur — asla 10 milyar satır taramaz. 10 milyar kayıt üzerinde 100ms altı, daha hızlı bir disk ile ilgili değildir; working set'i küçültmekle ilgilidir.
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 pattern'ler her şeyi yönlendirir
Teknolojiyi seçmeden önce sorun: "X kullanıcısının son 20 siparişini getir" bir point/range sorgusudur — partition ve sort key'in buna tam olarak uymasını istersiniz. "Bu ay bölgeye göre geliri topla" bir analitik tarama'dır — bir row store yanlış araçtır. Önce sorguyu modellemek, çalışan bir tasarımı, makul görünen ama full-scan yapan bir tasarımdan ayıran şeydir.
