محتويات الدورة
معمارية البرمجيات
الأساسيات: الوعود والبنية والملكية
التفاعلات: التوزيع والفشل والتشغيل
التطور: السعة والانتقال والتحقق والمراجعة

معمارية البرمجيات / الأساسيات: الوعود والبنية والملكية / الدرس 6

احم القيود عند مالك البيانات

استخدم الملكية المرجعية والتحديث الذري لتفسير اختلاف فحص السعة عن حجزها.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • حدّد القيد والحد المسؤول عن فرضه.
  • حلّل التسابق ونطاق المعاملة وحدود نماذج القراءة.

اكتب القاعدة التي يجب أن تصح دائما

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

قد تسمح القراءة ثم الكتابة بمرور مستدعيين

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

text تداخل غير آمن مقصود
A reads remaining = 1
B reads remaining = 1
A inserts active reservation
B inserts active reservation
Result: two reservations competed for one seat

هذا أثر تحليلي، لا SQL تنفيذي ولا نتيجة محرك مقاسة. يوضح أن نجاح القراءتين لا يثبت أمان التحديث المشترك.

اجعل القرار والتحديث عملية محمية واحدة

يمكن في تصميم أن يُنقص عداد متبقّ مرجعي شرطيا حين يكون موجبا ويُسجّل الحجز في المعاملة نفسها. وقد يسلسل تصميم آخر التغييرات عبر تجميعة الورشة أو نموذج تخصيص فريد. لكل خيار كلف مثل التنافس وإعادة التعارض والاستعادة. يوضح SQL الشرطي القصد ولا يفرض مخططا عاما. يجب ربطه بإنشاء الحجز واختبار التراجع؛ فقد يفقد الإنقاص وحده السعة عند فشل بقية المسار.

sql جزء توضيحي لتخصيص شرطي
UPDATE workshop_capacity
SET remaining = remaining - 1
WHERE workshop_id = :workshop_id AND remaining > 0;

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

أبق مالكا واحدا لكتابة العمل

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

تحقق من القيد بعد التعارض والاستعادة

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

الأخطاء الشائعة وإصلاحها

يُحجز المقعد الأخير مرتين.

لماذا يحدث؟
فُحصت السعة خارج حد التحديث المحمي.
كيف تصلحه؟
اختر تخصيصا ذريّا يدعمه المحرك وعالج التعارض.
كيف تتجنب تكراره؟
اختبر تنافسا مضبوطا على المقعد الأخير.

تسمح ذاكرة لوحة التقارير بالحجز.

لماذا يحدث؟
اعتُبر نموذج قراءة مشتق حالة مرجعية.
كيف تصلحه؟
وجّه الأمر إلى مالك الحجز للتحقق.
كيف تتجنب تكراره؟
سمّ حداثة الاستعلام وملكية الكتابة صراحة.

ينخفض العداد دون وجود حجز.

لماذا يحدث؟
لم تكن الكتابات المرتبطة ذرية أو قابلة للاستعادة.
كيف تصلحه؟
ضع التغييرات في معاملتها المقصودة أو صمّم المطابقة.
كيف تتجنب تكراره؟
اختبر الفشل بين الكتابات المرتبطة.

اختبر فهمك

1. هل يمنع معرف حجز فريد تجاوز السعة؟

اعرض الحل المشروح

يمنع المعرفات المتكررة، لكن معرفين مختلفين قد يستهلكان المقعد الأخير. يجب أن يمثل القيد السعة فعلا عبر تخصيص شرطي أو أقفال أو هوية مقعد أو استراتيجية مثبتة. تحل الفريدة القاعدة التي يعبر عنها مفتاحها فقط.

2. لماذا يجب أن تعيد معاملة الحجز الفاشلة العداد المنقوص؟

اعرض الحل المشروح

يصف العداد والحجز التخصيص نفسه. إبقاء الإنقاص وحده يخفي سعة بلا حجز مقابل. في معاملة واحدة يجب أن يزيل التراجع الأثرين؛ وفي مسار مقسم يجب أن تفسر آلة حالات دائمة وإصلاح الحالة الجزئية. اختبر التصميم بدلا من افتراض التصحيح اللاحق.

أهم ما تعلمته

  • يجب أن يحمي حد الكتابة المرجعي قيد العمل.
  • قد يفيد الاستعلام القديم العرض دون أن يصلح للتخصيص.

المراجع الرسمية