صمّم لـنمط الوصول (access pattern) أولاً، ثم اختر التجزئة + الفهرس/المفتاح الأساسي الصحيح كي يلمس أي استعلام واحد شريحة صغيرة محدودة — لا يمسح أبداً عشرة مليارات صفّ. أقل من 100 مللي ثانية عبر عشرة مليارات سجلّ ليس عن قرص أسرع؛ بل عن جعل مجموعة العمل (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
أنماط الوصول تقود كل شيء
قبل اختيار التقنية، اسأل: "احصل على آخر 20 طلباً للمستخدم X" هو استعلام نقطة/نطاق — تريد أن يطابقه مفتاح التجزئة ومفتاح الفرز (sort key) تماماً. "اجمع الإيراد حسب المنطقة هذا الشهر" هو مسح تحليلي — ومخزن الصفوف (row store) هو الأداة الخاطئة. نمذجة الاستعلام أولاً هي ما يفصل تصميماً يعمل عن تصميم يبدو معقولاً لكنه يمسح كل شيء.
