Rancang untuk pola akses terlebih dahulu, lalu pilih partisi + index/PK yang tepat agar setiap query tunggal hanya menyentuh irisan kecil yang terbatas — tidak pernah men-scan 10 miliar baris. Sub-100ms atas 10 miliar record bukan soal disk yang lebih cepat; ini soal membuat working set menjadi kecil.
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
Pola akses menentukan segalanya
Sebelum memilih teknologi, tanyakan: "Ambil 20 order terakhir user X" adalah query point/range — Anda ingin partisi dan sort key cocok persis dengannya. "Jumlahkan revenue per region bulan ini" adalah scan analitis — row store adalah alat yang salah. Memodelkan query terlebih dahulu itulah yang memisahkan desain yang bekerja dari yang terlihat masuk akal tetapi men-scan penuh.
