قفل التسجيل
قفل السجلات هو أسلوب لمنع الوصول المتزامن إلى البيانات في قاعدة البيانات ، وذلك لمنع النتائج غير المتناسقة.
يُوضَّح المثال الكلاسيكي من خلال موظفين مصرفيين يحاولان تحديث نفس الحساب المصرفي لمعاملتين مختلفتين. يسترجع الموظفان (أي ينسخان) سجل الحساب . يُطبِّق الموظف الأول معاملة ويحفظها. يُطبِّق الموظف الثاني معاملة مختلفة على نسخته المحفوظة، ويحفظ النتيجة بناءً على السجل الأصلي وتعديلاته، مستبدلاً بذلك المعاملة التي أدخلها الموظف الأول. لم يعد السجل يعكس المعاملة الأولى، كما لو أنها لم تحدث أبدًا.
إحدى الطرق البسيطة لمنع ذلك هي قفل الملف عند تعديل أي سجل من قِبل أي مستخدم، بحيث لا يتمكن أي مستخدم آخر من حفظ البيانات. هذا يمنع الكتابة فوق السجلات بشكل خاطئ، ولكنه يسمح بمعالجة سجل واحد فقط في كل مرة، مما يحجب الوصول عن المستخدمين الآخرين الذين يحتاجون إلى تعديل السجلات في الوقت نفسه.
للسماح لعدة مستخدمين بتعديل جدول قاعدة البيانات في الوقت نفسه، ومنع التناقضات الناتجة عن الوصول غير المقيد، يمكن قفل سجل واحد عند استرجاعه للتعديل أو التحديث. يُمنع أي شخص يحاول استرجاع السجل نفسه للتعديل من الكتابة بسبب هذا القفل (مع أنه، بحسب التطبيق، قد يتمكن من عرض السجل دون تعديله). بمجرد حفظ السجل أو إلغاء التعديلات، يُزال القفل. لا يمكن حفظ السجلات أبدًا بحيث تُستبدل التغييرات الأخرى، مما يحافظ على سلامة البيانات .
في نظرية إدارة قواعد البيانات، يُستخدم التأمين لتحقيق العزل بين مستخدمي قاعدة البيانات المتعددين. وهذا هو الحرف "I" في اختصار ACID .
دقة الأقفال
إذا كان موظفو البنك (كما هو موضح في المثال أعلاه) يخدمون عميلين، ولكن حساباتهما موجودة في سجل واحد، فسيتعين إتاحة السجل بأكمله، أو جدول أو أكثر من جداول قاعدة البيانات ، للموظفين للتعديل حتى يتمكن كل منهم من إتمام معاملة واحدة في كل مرة ( قفل الملف ). على الرغم من أن هذه الطريقة آمنة، إلا أنها قد تتسبب في انتظار غير ضروري.
إذا كان بإمكان الموظفين إزالة صفحة واحدة من دفتر الأستاذ، تحتوي على حساب العميل الحالي (بالإضافة إلى عدة حسابات أخرى)، فإنه يمكن خدمة عدة عملاء في وقت واحد ، شريطة أن يكون حساب كل عميل موجودًا في صفحة مختلفة عن حسابات العملاء الآخرين. إذا كان لدى عميلين حسابات في نفس الصفحة، فلا يمكن خدمة سوى عميل واحد في كل مرة. وهذا يُشبه قفل الصفحة في قاعدة البيانات.
يُمكن تحقيق مستوى أعلى من الدقة إذا تمكّن موظف من إدارة كل حساب على حدة. وهذا يسمح بخدمة أي عميل دون انتظار عميل آخر يستخدم حسابًا مختلفًا. يُشبه هذا قفل مستوى السجل ، وهو عادةً أعلى مستوى من دقة القفل في نظام إدارة قواعد البيانات.
في قاعدة بيانات SQL ، يُطلق على السجل عادةً اسم "صف".
يُؤدي إدخال الأقفال الجزئية (الجزئية) إلى إمكانية حدوث حالة تُسمى حالة الجمود . يحدث الجمود عند استخدام القفل التزايدي (قفل كيان واحد، ثم قفل كيان إضافي واحد أو أكثر). على سبيل المثال، إذا طلب عميلان من موظفين في بنك الحصول على معلومات حساباتهما لتحويل مبلغ من المال إلى حسابات أخرى، فسيتم قفل الحسابين. بعد ذلك، إذا أخبر العميلان موظفيهما أن المال سيُحوّل إلى حسابات بعضهما البعض، فسيبحث الموظفون عن الحسابات الأخرى، لكنهم سيجدونها "قيد الاستخدام"، وسينتظرون إعادتها. دون علمهما، ينتظر الموظفان بعضهما البعض، ولن يتمكن أي منهما من إتمام معاملته حتى يتخلى الآخر عن الحساب ويعيده. تُستخدم تقنيات متنوعة لتجنب مثل هذه المشاكل.
استخدام الأقفال
يجب إدارة عمليات تأمين السجلات بين الجهات التي تطلبها، بحيث لا تُمنح أي جهة صلاحيات زائدة عبر عمليات منح متتالية ، ولا تُحرم أي جهة أخرى فعليًا من الوصول. ويمكن أن تكون الجهات التي تطلب التأمين تطبيقات فردية (برامج) أو معالجًا كاملًا.
ينبغي تصميم التطبيق أو النظام بحيث لا يُحتفظ بأي قفل إلا لأقصر مدة ممكنة. قراءة البيانات، دون إمكانية التحرير، لا تتطلب قفلًا، وعادةً ما تكون قراءة السجلات المقفلة مسموحة.
يمكن طلب نوعين رئيسيين من الأقفال:
أقفال حصرية
تُحتفظ كياناتٌ مُحددةٌ بأقفالٍ حصرية، عادةً لغرض الكتابة في السجل. إذا مُثِّل مخطط القفل بقائمة، فستحتوي قائمة حاملي القفل على عنصر واحد فقط. ولأن هذا النوع من الأقفال يمنع فعليًا أي كيان آخر يحتاج إلى القفل من المعالجة، فيجب توخي الحذر في:
- تأكد من تثبيت القفل لأقصر وقت ممكن؛
- عدم الاحتفاظ بالقفل عبر استدعاءات النظام أو الوظائف حيث لم يعد الكيان قيد التشغيل على المعالج - وهذا يمكن أن يؤدي إلى حالة جمود؛
- تأكد من أنه في حالة خروج الكيان بشكل غير متوقع لأي سبب من الأسباب، يتم تحرير القفل.
يمكن وضع غير الحائزين على القفل (المعروفين أيضًا بالمنتظرين ) في قائمة تُخدَم بالتناوب، أو في قائمة انتظار وفقًا لأسلوب "الأول يُستَخدَم أولًا". يضمن هذا حصول أي منتظر محتمل على فرصة متساوية للحصول على القفل وعدم حرمانه منه. ولتسريع العملية أكثر، إذا دخل كيان ما في حالة سكون بانتظار القفل، يتحسن الأداء إذا تم إخطاره بمنح القفل، بدلًا من اكتشافه عند انتهاء مهلة النظام.
أقفال مشتركة
تختلف الأقفال المشتركة عن الأقفال الحصرية في أن قائمة حاملي الأقفال قد تحتوي على عدة عناصر. تسمح الأقفال المشتركة لجميع حاملي الأقفال بقراءة محتويات السجل مع العلم أنه لا يمكن تغيير السجل إلا بعد تحرير القفل من قبل جميع حاملي الأقفال. لا يمكن الحصول على أقفال حصرية عندما يكون السجل مقفلاً بالفعل (بشكل حصري أو مشترك) من قبل كيان آخر.
إذا وُضعت طلبات قفل لنفس الكيان في قائمة الانتظار، فبمجرد منح قفل مشترك، يمكن منح أي أقفال مشتركة أخرى في قائمة الانتظار. أما إذا وُجد قفل حصري في القائمة التالية، فيجب الانتظار حتى يتم تحرير جميع الأقفال المشتركة. وكما هو الحال مع الأقفال الحصرية، ينبغي الاحتفاظ بهذه الأقفال المشتركة لأقصر وقت ممكن.
انظر أيضاً
مراجع
- ↑ غراي، جيم ورويتر، أندرياس (1993)، معالجة المعاملات الموزعة: المفاهيم والتقنيات ، مورغان كوفمان، الصفحات 375-437 ، رقم ISBN 1-55860-190-2
- التحكم في التزامن
- معالجة المعاملات
