access pattern-এর জন্য প্রথমে ডিজাইন করুন, তারপর partitioning + সঠিক index/PK বাছুন যাতে যেকোনো একক query একটি ছোট, সীমাবদ্ধ slice স্পর্শ করে — কখনও ১০০০ কোটি row scan না করে। ১০০০ কোটি record-এর উপর 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 pattern সবকিছু চালায়
tech বাছার আগে জিজ্ঞাসা করুন: "ইউজার X-এর শেষ ২০টি order আনুন" একটি point/range query — আপনি চান partition ও sort key ঠিক এর সঙ্গে মিলুক। "এই মাসে region অনুযায়ী revenue sum করুন" একটি analytical scan — একটি row store ভুল টুল। প্রথমে query মডেল করাই একটি কার্যকর ডিজাইনকে একটি যুক্তিসঙ্গত দেখতে কিন্তু full-scan করা ডিজাইন থেকে আলাদা করে।
