დააპროექტეთ access pattern-ისთვის ჯერ, შემდეგ აირჩიეთ partitioning + სწორი index/PK, რომ ნებისმიერი ცალკე query ეხებოდეს პატარა, შემოსაზღვრულ ნაჭერს — არასდროს დაასკანიროთ 10B მწკრივი. 100ms-ზე ნაკლები 10 მილიარდ ჩანაწერზე არ ეხება უფრო სწრაფ დისკს; ის ეხება 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-ები ყველაფერს განაპირობებს
ტექნოლოგიის არჩევამდე იკითხეთ: "აიღე მომხმარებელ X-ის ბოლო 20 order" არის point/range query — გინდათ, რომ partition და sort key ზუსტად ემთხვეოდეს მას. "შეაჯამე შემოსავალი რეგიონის მიხედვით ამ თვეს" არის ანალიტიკური scan — row store არასწორი იარაღია. query-ის ჯერ მოდელირება არის ის, რაც განასხვავებს დიზაინს, რომელიც მუშაობს, იმისგან, რომელიც გონივრულად გამოიყურება, მაგრამ full-scan-ს აკეთებს.
