التحكم التفاؤلي في التزامن
التحكم التفاؤلي بالتزامن ( OCC )، المعروف أيضًا باسم القفل التفاؤلي ، هو أسلوب للتحكم بالتزامن لا يعتمد على القفل، ويُطبق على الأنظمة المعاملاتية مثل أنظمة إدارة قواعد البيانات العلائقية وذاكرة المعاملات البرمجية . يفترض OCC إمكانية إتمام معاملات متعددة بشكل متكرر دون تداخل فيما بينها. أثناء التشغيل، تستخدم المعاملات موارد البيانات دون الحصول على أقفال عليها. قبل الالتزام، تتحقق كل معاملة من عدم قيام أي معاملة أخرى بتعديل البيانات التي قرأتها. إذا كشف الفحص عن تعديلات متعارضة، تتراجع المعاملة الملتزمة ويمكن إعادة تشغيلها. [ 1 ] طُرح التحكم التفاؤلي بالتزامن لأول مرة عام 1979 من قِبل إتش تي كونغ وجون تي روبنسون. [ 2 ]
يُستخدم التحكم في التزامن المفتوح (OCC) عادةً في بيئات ذات تنازع منخفض على البيانات . عندما تكون التعارضات نادرة، يمكن إتمام المعاملات دون تكلفة إدارة الأقفال ودون انتظار المعاملات الأخرى لإلغاء أقفالها، مما يؤدي إلى إنتاجية أعلى من طرق التحكم الأخرى في التزامن. مع ذلك، إذا كان التنازع على موارد البيانات متكررًا، فإن تكلفة إعادة تشغيل المعاملات بشكل متكرر تؤثر سلبًا على الأداء بشكل كبير، وفي هذه الحالة قد تكون طرق التحكم الأخرى في التزامن أنسب. لكن حتى الطرق القائمة على الأقفال ("التشاؤمية") قد تُؤدي إلى أداء ضعيف لأن الأقفال قد تُحدّ بشكل كبير من التزامن الفعال حتى عند تجنب حالات الجمود.
مراحل التحكم التفاؤلي في التزامن
تتضمن معاملات التحكم المتفائل في التزامن هذه المراحل: [ 2 ]
- البداية : سجل طابعًا زمنيًا يحدد بداية المعاملة.
- التعديل : قراءة قيم قاعدة البيانات، وكتابة التغييرات بشكل مبدئي.
- التحقق : التحقق مما إذا كانت معاملات أخرى قد عدّلت البيانات التي استخدمتها هذه المعاملة (قراءةً أو كتابةً). يشمل ذلك المعاملات التي اكتملت بعد وقت بدء هذه المعاملة، واختيارياً، المعاملات التي لا تزال نشطة وقت التحقق.
- الالتزام/التراجع : في حال عدم وجود تعارض، يتم تطبيق جميع التغييرات. أما في حال وجود تعارض، فيتم حله، عادةً بإلغاء العملية، مع إمكانية وجود طرق حل أخرى. يجب توخي الحذر لتجنب حدوث خطأ في وقت التحقق من وقت الاستخدام ، خاصةً إذا لم يتم تنفيذ هذه المرحلة والمرحلة السابقة لها كعملية ذرية واحدة .
استخدام الإنترنت
إن طبيعة بروتوكول HTTP غير المعتمدة على الحالة تجعل آلية القفل غير عملية في واجهات المستخدم على الويب. فمن الشائع أن يبدأ المستخدم بتعديل سجل ثم يغادر دون النقر على رابط "إلغاء" أو "تسجيل الخروج". وفي حال استخدام آلية القفل، يتعين على المستخدمين الآخرين الذين يحاولون تعديل السجل نفسه الانتظار حتى تنتهي مهلة قفل المستخدم الأول.
يوفر بروتوكول HTTP شكلاً من أشكال التحكم في الوصول المضمنة. يمكن أن تتضمن الاستجابة لطلب GET الأولي علامة ETag لاستخدامها في طلبات PUT اللاحقة في ترويسة If-Match. وبالتالي، يمكن رفض أي طلبات PUT تحتوي على علامة ETag قديمة في ترويسة If-Match. [ 3 ]
توفر بعض أنظمة إدارة قواعد البيانات خاصية OCC بشكل أصلي، دون الحاجة إلى كتابة كود برمجي خاص. أما في أنظمة أخرى، فيمكن للتطبيق تنفيذ طبقة OCC خارج قاعدة البيانات، مما يجنب انتظار البيانات أو الكتابة فوق السجلات دون تنبيه. في هذه الحالة، قد يتضمن النموذج حقلاً مخفياً يحتوي على المحتوى الأصلي للسجل، أو طابعاً زمنياً، أو رقماً تسلسلياً، أو رمزاً غير شفاف. عند الإرسال، تتم مقارنة هذا الحقل بقاعدة البيانات. إذا كان هناك اختلاف، يتم استدعاء خوارزمية حل التعارضات.
أمثلة
- تستخدم صفحات التحرير الخاصة بـ MediaWiki OCC. [ 4 ]
- يستخدم Bugzilla نظام OCC؛ وتُسمى تعارضات التحرير "التصادمات في الهواء". [ 5 ]
- يحتوي إطار عمل Ruby on Rails على واجهة برمجة تطبيقات (API) لـ OCC. [ 6 ]
- يستخدم إطار عمل Grails نظام OCC في اصطلاحاته الافتراضية. [ 7 ]
- يستخدم محرك قاعدة بيانات GT.M نظام OCC لإدارة المعاملات [ 8 ] (حتى التحديثات الفردية يتم التعامل معها كمعاملات صغيرة).
- يحتوي إطار عمل الكيانات من مايكروسوفت (بما في ذلك Code-First) على دعم مدمج لـ OCC استنادًا إلى قيمة الطابع الزمني الثنائي. [ 9 ]
- تدعم معظم أنظمة التحكم في المراجعة نموذج "الدمج" للتزامن، وهو ما يُعرف بـ OCC.
- Mimer SQL هو نظام إدارة قواعد بيانات يطبق فقط التحكم التفاؤلي في التزامن. [ 10 ]
- يستخدم مخزن بيانات Google App Engine بروتوكول OCC. [ 11 ]
- يدعم محرك البحث Apache Solr تقنية OCC عبر حقل _version_ . [ 12 ]
- يقوم محرك البحث Elasticsearch بتحديث مستنداته عبر OCC. يُخصص لكل إصدار من المستند رقم تسلسلي، وتحصل الإصدارات الأحدث على أرقام تسلسلية أعلى. ونظرًا لأن التغييرات التي تطرأ على المستند تصل بشكل غير متزامن، يمكن للبرنامج استخدام الرقم التسلسلي لتجنب استبدال إصدار أحدث بإصدار قديم. [ 13 ]
- يطبق CouchDB بروتوكول OCC من خلال مراجعات المستندات. [ 14 ]
- يعتمد نظام إدارة المعاملات في نظام إدارة قواعد البيانات MonetDB الموجه نحو الأعمدة على OCC. [ 15 ]
- تستخدم معظم تطبيقات ذاكرة المعاملات البرمجية تقنية OCC.
- يوفر Redis خدمة OCC من خلال أمر WATCH. [ 16 ]
- يستخدم نظام Firebird بنية متعددة الأجيال كتطبيق لـ OCC لإدارة البيانات.
- يستخدم DynamoDB التحديث المشروط كتطبيق لـ OCC. [ 17 ]
- يستخدم Kubernetes بروتوكول OCC عند تحديث الموارد. [ 18 ]
- YugabyteDB هي قاعدة بيانات سحابية أصلية تستخدم بشكل أساسي OCC. [ 19 ]
- Firestore هي قاعدة بيانات NoSQL من Firebase تستخدم OCC في معاملاتها.
- يستخدم Apache Iceberg نظام OCC لتحديث الجداول وإجراء عمليات الصيانة عليها.
انظر أيضاً
مراجع
- ↑ جونسون، روهيت (2003). "مشكلات الوصول الشائعة إلى البيانات" . تصميم وتطوير تطبيقات J2EE من خلال جلسات فردية مع خبراء . دار نشر Wrox. رقم ISBN 978-0-7645-4385-2تمت أرشفة هذا النص من المصدر الأصلي في 8 أكتوبر 2011.
- 1 2 هـ. ت. كونغ، ج. ت. روبنسون (1981). "حول الأساليب التفاؤلية للتحكم في التزامن" (ملف PDF) . معاملات ACM لأنظمة قواعد البيانات. مؤرشف (ملف PDF) من الأصل في 31 أغسطس 2019.
- ↑ "تحرير الويب - اكتشاف مشكلة التحديث المفقود باستخدام عملية السحب غير المحجوزة" . ملاحظة W3C . 10 مايو 1999.
- ↑ مساعدة: تحرير التعارض
- ↑ "باغزيلا: الأسئلة الشائعة: أسئلة إدارية" . موزيلا ويكي . 11 أبريل 2012.
- ↑ "وحدة ActiveRecord::Locking" . وثائق إطار عمل Rails .
- ↑ "رسم خرائط الكائنات العلائقية (GORM)" . وثائق إطار عمل Grails . مؤرشف من الأصل بتاريخ 15-08-2014.
- ↑ "معالجة المعاملات" . دليل مبرمجي GT.M، إصدار يونكس .
- ↑ "معالجة تعارضات التزامن" . مركز توثيق Entity Framework . 5 يوليو 2023.
- ↑ "تزامن المعاملات - التحكم التفاؤلي في التزامن" . مطورو Mimer - الميزات . تم الاطلاع عليه بتاريخ 22 ديسمبر 2023 .
- ↑ "مخزن البيانات" . ما هو محرك تطبيقات جوجل؟ 27 أغسطس 2010.
- ↑ "تحديث أجزاء من المستندات" . تم الاطلاع عليه بتاريخ 28-06-2018 .
- ↑ "التحكم التفاؤلي في التزامن" . Elastic . تم الاسترجاع في 2024-02-05 .
- ↑ "نظرة عامة تقنية" . وثائق Apache CouchDB . تم الاطلاع عليها بتاريخ 2024-02-06 .
- ↑ "المعاملات - MonetDB" . 16 يناير 2013.
- ↑ "المعاملات في Redis" .
- ↑ "العمل مع العناصر والخصائص - عمليات الكتابة المشروطة" . تم الاطلاع عليه بتاريخ 2 نوفمبر 2020 .
- ↑ "نظرة عامة على واجهة برمجة التطبيقات - عمليات الموارد" . تم الاطلاع عليه بتاريخ 3 نوفمبر 2020 .
- ↑ فريق Yugabyte. "القفل الصريح | وثائق YugabyteDB" . docs.yugabyte.com . مؤرشف من الأصل بتاريخ 4 يناير 2022. تم الاطلاع عليه بتاريخ 4 يناير 2022 .
روابط خارجية
- كونغ، إتش تي؛ جون تي. روبنسون (يونيو 1981). "حول الأساليب التفاؤلية للتحكم في التزامن". معاملات ACM لأنظمة قواعد البيانات . 6 (2): 213-226 . CiteSeerX 10.1.1.101.8988 . doi : 10.1145/319566.319567 . S2CID 61600099 .
- Enterprise JavaBeans، الإصدار 3.0، تأليف بيل بيرك وريتشارد مونسون-هايفل، الفصل 16: المعاملات، القسم 16.3.5: القفل التفاؤلي، الناشر: أورايلي، تاريخ النشر: 16 مايو 2006، رقم ISBN المطبوع 0-596-00978-X،
- هولمان، أندرياس (مايو 2009). "العزل المتعدد: مزاياه وقيوده" (ملف PDF) . العزل المتعدد (ما الفرق بين القفل التشاؤمي والقفل التفاؤلي) . 01069 غوتزكوفشتراسه 30/F301.2، دريسدن: شركة هابي غايز سوفتوير. ص 8. تاريخ الاسترجاع: 16 مايو 2013 .
{{cite conference}}: CS1 maint: location ( link )
- التحكم في التزامن
- خوارزميات التحكم في التزامن
- معالجة المعاملات
