المعاملات وآليات السيطرة عليها

المعاملات


المعاملة هي سلسلة من العمليات على البيانات التي لها بداية ونهاية.


المعاملة هي عملية قراءة وكتابة متسلسلة. يمكن أن تكون نهاية المعاملة إما حفظ التغييرات (الالتزام أو الالتزام) أو إلغاء التغييرات (العودة إلى الحالة السابقة ، الاستعادة). فيما يتعلق بقاعدة البيانات ، تكون المعاملة عبارة عن سلسلة من الاستعلامات التي يتم التعامل معها كاستعلام واحد.

يجب أن تفي المعاملات بخصائص ACID


Atomicity. يتم تنفيذ المعاملة بالكامل أو لا يتم تنفيذها على الإطلاق.

الاتساق. في نهاية المعاملة ، يجب عدم انتهاك القيود المفروضة على البيانات (على سبيل المثال ، القيود في قاعدة البيانات). يعني التناسق أنه سيتم نقل النظام من حالة صحيحة إلى أخرى صحيحة.

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

الاستقرار. بمجرد الالتزام ، لا ينبغي أن تضيع التغييرات.

سجل المعاملات


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


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

ببساطة إعادة تنفيذ المعاملات الخاطئة ليست كافية لاسترداد.

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

مستويات العزلة


قراءة ملتزم


المشكلة في قراءة قذرة هي أن معاملة يمكن قراءة النتيجة المتوسطة لمعاملة أخرى.

مثال القيمة الأولية للرصيد هي 0 دولار. يضيف T1 $ 50 إلى الرصيد. يقرأ T2 قيمة الرصيد (50 دولارًا). T1 يلغي التغييرات وينتهي. يستمر T2 التنفيذ مع بيانات الرصيد غير صحيحة.

الحل هو "قراءة ملتزم" ، الذي يحظر قراءة البيانات المعدلة بواسطة معاملة. إذا غيرت المعاملة A بعض مجموعة البيانات ، فستضطر المعاملة B ، عند الوصول إلى هذه البيانات ، إلى انتظار المعاملة A.

تكرار القراءة


مشكلة التغييرات المفقودة (التحديثات المفقودة). T1 يحفظ التغييرات على التغييرات إلى T2.

مثال قيمة الرصيد المبدئي هي 0 دولار ، وفي نفس الوقت تجدد المعاملات الرصيد. قراءة T1 و T2 رصيد 0 دولار. ثم T2 يضيف 200 دولار إلى 0 دولار ويحفظ النتيجة. يضيف T1 100 دولار إلى 0 دولار ويحفظ النتيجة. النتيجة الإجمالية هي 100 دولار بدلاً من 300 دولار.

مشكلة تكرار القراءة. قراءة متكررة من نفس البيانات بإرجاع قيم مختلفة.

مثال يقرأ T1 قيمة رصيد قدرها 0 دولار. ثم يضيف T2 $ 50 إلى الرصيد وينتهي. يقرأ T1 البيانات مرة أخرى ويكتشف وجود تعارض مع النتيجة السابقة.

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

قراءة منظمة (متسلسلة)


قراءة فانتوم اثنين من الاستعلامات التي تحدد البيانات حسب بعض الشرط بإرجاع قيم مختلفة.

مثال يسأل T1 عن عدد المستخدمين الذين يزيد رصيدهم عن 0 دولار ولكن أقل من 100 دولار. يطرح T2 $ 1 من مستخدم برصيد 101 دولار. T1 يعيد تنفيذ الطلب.

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

جدولة (جدولة)


يضبط الترتيب الذي يجب أن يتم تنفيذ العمليات به في المعاملات الموازية


يوفر مستوى معين من العزلة. إذا كانت نتيجة العمليات لا تعتمد على ترتيبها ، فإن هذه العمليات قابلة للتغيير (دائمة). تتم قراءة الأوامر والعمليات على بيانات مختلفة. عمليات القراءة والكتابة والكتابة ليست تبادلية. تتمثل مهمة المجدول في تبديل العمليات التي تتم بمعاملات متوازية بحيث تكون نتيجة التنفيذ مكافئة للتنفيذ المتسلسل للمعاملات.

آليات التحكم في التزامن


متفائل يعتمد على كشف النزاعات وحلها ، متشائم يعتمد على منع نشوب الصراعات


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

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

لوك (قفل)


إذا كانت إحدى المعاملات قد حظرت البيانات ، فيجب على بقية المعاملة الوصول إلى البيانات عند الوصول إلى البيانات.


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

الجمود هو موقف عندما تكون المعاملات في وضع الاستعداد ، وتستمر إلى أجل غير مسمى


مثال المعاملة الأولى تنتظر إصدار البيانات التي تم التقاطها بواسطة الثانية ، بينما تنتظر الثانية إصدار البيانات التي تم التقاطها بواسطة الأولى.

يتيح الحل المتفائل لمشكلة حالة توقف تام حدوث حالة توقف تام ، ولكن بعد ذلك يستعيد النظام عن طريق التراجع عن أحد المعاملات المتضمنة في حالة توقف تام


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

يتم تعيين طابع زمني TS لكل معاملة تحتوي على وقت بدء المعاملة.

الانتظار يموت.

إذا كان TS (Ti) < TS (Tj) ، فحينئذٍ تنتظر Ti ، وإلا فإن Ti تعود إلى الوراء وتبدأ من جديد بنفس الطابع الزمني.

إذا كانت إحدى المعاملات الناشئة قد استحوذت على مورد وطلب أحد كبار السن المورد نفسه ، فيُسمح بتوقع معاملة قديمة. إذا كانت إحدى المعاملات القديمة قد استحوذت على مورد ، فسيتم التراجع عن المعاملة الناشئة التي تطلب هذا المورد.

الجرح-الانتظار.

إذا كان TS (Ti) < TS (Tj) ، فسوف تسترجع Tj وتبدأ من جديد بنفس الطابع الزمني ، وإلا تنتظر Ti .

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

الحل المتشائم لمشكلة الجمود لا يسمح للمعاملة ببدء التنفيذ إذا كان هناك خطر الجمود


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

قفل على مرحلتين - منع الجمود من خلال التقاط جميع الموارد التي تستخدمها المعاملة في بداية المعاملة وإطلاقها في النهاية


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

يضمن الالتزام على مرحلتين تنفيذ الالتزام على كافة النسخ المتماثلة لقاعدة البيانات


تساهم كل قاعدة بيانات بمعلومات حول البيانات التي سيتم تغييرها في السجل وتتوافق مع المنسق OK (مرحلة التصويت). بعد أن أجاب الجميع على "موافق" ، يرسل المنسق إشارة تلزم الجميع بالالتزام. بعد الالتزام بالخادم ، يستجيبون "موافق" ، إذا لم يرد واحد على الأقل على "موافق" ، فإن المنسق يرسل إشارة لإلغاء التغييرات على جميع الخوادم (مرحلة الإكمال).

طريقة الطابع الزمني


يتم إرجاع معاملة قديمة عند محاولة الوصول إلى البيانات المتضمنة في معاملة أصغر


يتم تعيين طابع زمني TS كل معاملة المقابلة لوقت البدء في التنفيذ. إذا كان Ti أكبر من Tj ، فإن TS (Ti) < TS (Tj) .

عندما تتراجع المعاملة ، يتم تعيين طابع زمني جديد. يتم وضع علامة على كل عنصر من عناصر البيانات Q المتضمنة في المعاملة. W-TS (Q) هو الطابع الزمني لأصغر المعاملات التي كتبت بنجاح إلى Q. R-TS (Q) هو الطابع الزمني لأصغر المعاملات التي أكملت سجل قراءة على Q.

عندما تطلب المعاملة T قراءة بيانات Q ، يكون هناك خياران ممكنان.

إذا كان TS (T) < W-TS (Q) ، أي ، فقد تم تحديث البيانات بمعاملة أصغر ، ثم استرجاع المعاملة T.

إذا كانت TS (T) > = W-TS (Q) ، تتم القراءة ثم تصبح R-TS (Q) MAX (R-TS (Q) ، TS (T)) .

عندما تطلب المعاملة T تغييرًا في البيانات Q ، يكون هناك خياران ممكنان.

إذا كان TS (T) < R-TS (Q) ، أي ، فقد تمت بالفعل قراءة البيانات بمعاملة أصغر سنا وإذا حدث تغيير ، فسيظهر تعارض. المعاملة T تتحرك مرة أخرى.

إذا كانت TS (T) < W-TS (Q) ، أي ، تحاول المعاملة الكتابة فوق القيمة الأحدث ، تسترجع المعاملة T. في حالات أخرى ، يتم إجراء التغيير وتصبح W-TS (Q) مساوية لـ TS (T) .

لا يلزم بناء رسم بياني انتظار مكلف. تعتمد المعاملات الأقدم على المعاملات الأحدث ، وبالتالي لا توجد حلقات في عمود الانتظار. لا توجد أي طريق مسدود ، لأن المعاملات لا تتوقع ، ولكن يتم التراجع على الفور. عمولات المتتالية ممكنة. إذا استعاد Ti ، وقرأ Tj البيانات التي غيّرها Ti ، فيجب أن يسترجع Tj أيضًا. إذا كانت Tj قد أبلغت بالفعل في هذه الحالة ، فسيكون هناك انتهاك لمبدأ الاستقرار.

حل واحد إلى المتتالية التراجع. تقوم المعاملة بجميع عمليات الكتابة في النهاية ، ويجب أن تنتظر المعاملات المتبقية حتى تكتمل هذه العملية. المعاملات تنتظر الالتزام قبل القراءة.

قاعدة توماس للكتابة - صيغة مختلفة لطريقة الطابع الزمني التي لا يُسمح فيها للبيانات القديمة التي يتم تحديثها عن طريق معاملة أصغر


المعاملة T تطلب تغيير في البيانات إذا كان TS (T) < W-TS (Q) ، بمعنى أن المعاملة تحاول الكتابة فوق قيمة أحدث ، فلن يتم إرجاع المعاملة T كما هو الحال في طريقة الطابع الزمني.

Source: https://habr.com/ru/post/ar446662/


All Articles