Phase 1: توجيه الاستعلامات
قبل إضافة البنية التحتية، توجيه ما لديك. يُحل معظم المشكلات المتعلقة بالدقة عن طريق التوجيهات الأفضل والفهرسة.
CREATE INDEX idx_orders_customer_status ON orders(customer_id, status, created_at DESC);
CREATE INDEX idx_products_category_price ON products(category_id, price);Phase 2: التكرارات للقراءة
للمشكلات المتعلقة بالقراءة، أضف التكرارات للقراءة لتوضع حمل العمل.
class DatabaseService {
async getOrder(id) {
return this.readDb.order.findUnique({ where: { id } });
}
async createOrder(data) {
return this.writeDb.order.create({ data });
}
}Phase 3: طبقة التخزين المؤقت
احفظ البيانات الساخنة لتقليل حمل قاعدة البيانات. استخدم Redis مع استراتيجيات TTL المناسبة وتنفيذ الاستحواذ.
async getUser(id) {
const cached = await redis.get(`user:${id}`);
if (cached) return JSON.parse(cached);
const user = await db.user.findUnique({ where: { id } });
await redis.setex(`user:${id}`, 3600, JSON.stringify(user));
return user;
}Phase 4: التجزئة
عندما لا يمكن للسرعة التعامل مع حمل الكتابة، تقسيم البيانات على خوادم متعددة.
| استراتيجية | أفضل ل | التضاد |
|---|---|---|
| التجزئة على أساس النطاق | بيانات الزمنية | نقاط الحارة على البيانات الأحدث |
| التجزئة على أساس الهاش | التوزيع المتساوي | الاستعلامات على نطاقات الصعبة |
| التجزئة الجغرافية | التطبيقات الحساسة للزمن | التنفيذ المعقد للتوازن |
إطار القرار
- توجيه الاستعلامات وتحسين الفهرسة أولاً
- إضافة التكرارات للقراءة للمشكلات المتعلقة بالقراءة
- احفظ البيانات الساخنة باستخدام Redis
- التجزئة فقط عندما لا يعمل أي شيء آخر