التطابق المتشائم Pessimistic Concurrency:
استخدم هذا الحل لو كنت "متشائما" بخصوص تعارض
البيانات التي يحفظها المستخدمين، أو كان أي تعارض يمكن أن يؤدي إلى خسائر كبيرة
للعمل الذي ينظمه برنامجك، فالتطابق المتشائم يمنع حدوث أي تضارب في
البيانات، وذلك بعمل إغلاق Lock لسجلات قاعدة البيانات التي قام أي مستخدم بتحميلها، ما يمنع أي مستخدم
آخر من تغييرها إلى أن يغلق المستخدم الأول الاتصال ويلغى الإغلاق.. ويمكن تنفيذ
هذا الحل في دوت نت باستخدام التعاملات Transactions.
وعند
استخدام هذا الحل، تكون جملة التحديث بسيطة للغاية، لأنك تستخدم المفتاح الأساسي
للحقل للعثور عليه في قاعدة البيانات، ومن ثم تغير قيمه مباشرة، لأنك واثق أنه لم
يتغير منذ أن قمت بتحميله.. هكذا مثلا ستكون جملة تحديث سجلات المؤلفين:
UPDATE Authors
SET Author = @Author,
CountryID = @CountryID,
Phone = @Phone,
About = @About
WHERE ID = @ID;
لاحظ
أن المعاملات الموجودة في هذا الاستعلام تأخذ قيمها من خانات السجل الذي يتم تحديثه
في مجموعة البيانات Dataset.
ويعتبر
التطابق المتشائم حلا حاسما للمشكلة، لأن أي مستخدم آخر سيحاول تعديل السجلات
المتنازع عليها سيحصل على رسالة خطأ تخبره بأنها مغلقة حاليا من قبل مستخدم آخر..
وفي هذه الحالة عليك أن تجعل برنامجك ينتظر انتهاء الإغلاق، ومن ثم يعرض للمستخدم السجلات
التي يحاول تحديثها، ليتعرف على التغييرات التي تمت عليها، ليقرر كيف يوائم بينها
وبين التغييرات التي أجراها، ثم يعيد حفظها في قاعدة البيانات.
لكن
عيب التطابق المتشائم أنه سيهبط بكفاءة البرنامج إذا استمر إغلاق كل سجل لفترات
زمنية طويلة، أو إذا تم تحديث أعداد ضخمة من السجلات على التتابع، وذلك لأن إغلاق
السجلات يستهلك جزءا من وقت تشغيل وذاكرة الخادم،
كما أنه يحتاج إلى إبقاء قنوات الاتصال مفتوحة مع المستخدمين الذين قاموا
بعملية الإغلاق، ما يحرم مستخدمين آخرين من الاتصال بقاعدة البيانات في ذلك
الوقت.. لكن يظل التطابق المتشائم الحل الأفضل عند التعامل مع قاعدة بيانات يتصل
بها عدد كبير من المستخدمين في نفس اللحظة، ويتصارعون على تحديث نفس السجلات، لأن كثرة
استخدام عمليات التراجع عن التعاملات Transactions Rollback لاستعادة القيم الأصلية قبل التضارب، تستهلك الخادم في هذه الحالة
بأكثر مما تفعل عمليات الإغلاق.
من
كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:
ليست هناك تعليقات:
إرسال تعليق
ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.