قاعدة البيانات عادة أول مكوّن يكشف ديون التصميم، وتفعل ذلك في أسوأ وقت ممكن: تحت الحمل. التطبيقات التي تهمهم بعشر طلبات في الثانية تنهار عند عشرة آلاف — ليس لأن الخوادم بطيئة، بل لأن المخطط وأنماط الاستعلام لم تُصمم لمعدل تمرير عالٍ. تصميم معدل التمرير العالي مجموعة مفاضلات متعمدة تُتخذ قبل وصول الحركة.

طبّع للكتابات ولامع للقراءات

ابدأ من مخطط مطبع بشكل سليم — يحمي التكامل، ويبسط التحديثات، ويمنحك أساساً صحيحاً. ثم لامع بشكل متعمد حيث تتطلب أنماط القراءة ذلك: أعمدة ملخصة، وعدادات محسوبة مسبقاً، ولقطات مدمجة لبيانات نادراً ما تتغير. كل حقل لا معياري ذاكرة مؤقتة تحافظ عليها داخل المعاملات؛ وثّق تلك الكلفة وأبقها محصورة. الانضباط هو تسمية المفاضلة بصوت مسموع قبل اتخاذها.

الفهارس: الاستراتيجية خلف الأعمدة

الفهارس ليست ضبطاً لاحقاً؛ إنها خطة الاستعلام. فهرس الأعمدة المستخدمة في WHERE وJOIN وORDER BY. ابنِ فهارس مركبة لتطابق ترتيب تصفية الاستعلام — العمود الرائد هو الأهم. استخدم فهارس تغطية (فحوص الفهرس فقط) للمسارات الساخنة للقراءة، وأبقِ نسبة الفهارس إلى الجداول معقولة: كل فهرس يبطئ الكتابات، لذا فإن ما لا تفهرسه قرار متعمد مثل ما تفهرسه.

اقرأ الخطة لا الأعراض

عندما يكون استعلام بطيئاً، لا تضيف فهارس عشوائياً. شغّل EXPLAIN، وابحث عن فحوص الجدول الكاملة والترتيبات غير المتوقعة وتقديرات الصفوف التي تتعارض بشدة مع الواقع، ثم حدّث الإحصائيات. الفهرس المفقود على عمود مفلتر هو الإصلاح الأشيع؛ الاستعلام المكتوب بشكل سيئ هو الثاني. قس التغيير قبل وبعد ثم امضِ — عمل الأداء بلا خط أساس تخمين يرتدي معطف مختبر.

افصل مسار القراءة عن مسار الكتابة

الأنظمة عالية التمرير غير متماثلة: كتّاب قلائل وجمهور قراء. استخدم نسخ القراءة المتماثلة لامتصاص حركة التحليلات والتقارير، ووجّه الاستعلامات من نمط OLAP بعيداً عن المسار التعاملي تماماً. استخدم تجميع الاتصالات على جانب التطبيق حتى لا يستنزف انفجار الطلبات حد اتصالات قاعدة البيانات أبداً. يجب أن يظل مسار الكتابة قصيراً تعاملياً وقابلاً للتنبؤ؛ ويمكن لمسار القراءة أن يتمدد ويتوازى.

التجميع والتقسيم والأرشفة

يجب تجميع الكتابات حيثما أمكن — أدخل صفوفاً متعددة في عبارة واحدة، وعالج قوائم الانتظار في قطع. قسّم الجداول الكبيرة بالتاريخ بحيث تبقى البيانات القديمة خارج الفهرس الساخن. أرشف الصفوف التاريخية إلى مستودع أو تخزين بارد؛ الجدول الذي تشكل بياناته الحية جزءاً ضئيلاً من حجمه الكلي سيبقي فهارسه دافئة وسريعة. النمو قرار مخطط لا مصادفة.

الذاكرة المؤقتة مكملة لا بديل

الذاكرة المؤقتة أمام قاعدة البيانات مكملة للتصميم الجيد لا بديل عنه. إذا اختفت الذاكرة المؤقتة، يجب أن يظل المخطط صامداً أمام الحمل الحقيقي. خزّن القراءات الباهظة الساخنة المستقرة — قوائم الفئات، صفحات المنتجات، بيانات المستخدم شبه الجلساتية — ودائماً خطط للتدافع: عندما تنتهي صلاحية مفتاح وتتسابق ألف طلب لإعادة بنائه، تشعر قاعدة البيانات بالقطيع الهادر. وحّد إعادة البناء خلف قفل واحد أو اقبل اهتزازاً قصيراً في مدد الصلاحية.

قائمة تحقق مخطط عالي التمرير

  • أساس مطبع؛ ولا معيارية متعمدة موثقة.
  • فهارس مركبة وتغطية مطابقة لخطط الاستعلام.
  • EXPLAIN مُتحقق لكل استعلام ساخن؛ وإحصائيات محدثة.
  • نسخ قراءة وتجميع اتصالات لحمل قراءة/كتابة غير متماثل.
  • كتابات مجمعة، وتقسيم بالتاريخ، وتاريخ مؤرشف.
  • مفاتيح ذاكرة مؤقتة مصممة لتحمل تدافع انتهاء الصلاحية.

تغييرات المخطط رخيصة في الأسبوع الأول وباهظة في السنة الثالثة؛ وقرارات التصميم في هذه المقالة هي ما يُبقيها رخيصة. يصمم فريق التطوير المتكامل في سمارت لوجيك مخططات MySQL وPostgreSQL عالية التمرير لتطبيقات لارافيل — مع الفهارس والتقسيم والنسخ المتماثل وطبقات الذاكرة المؤقتة. إذا كنت على وشك التوسع أو تشعر بالضغط بالفعل، دعنا نقيس أداء طبقة البيانات لديك ونعيد تصميمها قبل أن يقرر الحمل نيابة عنك.