تسلسل المعاملات وعزلها

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

المعاملات والنزاع حول البيانات

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

التعارض بين البيانات
عند تتنافس عمليتين أو أكثر للتحكم في المستند نفسه. على سبيل المثال: فقد تتطلب معاملة واحدة الحفاظ على اتساق المستند أثناء تنفيذ محاولة تحديث قيم حقل هذا المستند.

تقوم Cloud Firestore بحل الخلاف على البيانات من خلال تأخير أو فشل أحد للعمليات. مكتبات عملاء Cloud Firestore إعادة محاولة إجراء المعاملات التي تعذّر تنفيذها تلقائيًا بسبب تضارب البيانات. بعد عدد محدود من المحاولات، يتعذّر إتمام عملية المعاملة وينتج عنها خطأ الرسالة:

ABORTED: Too much contention on these documents. Please try again.

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

  • حِزم تطوير البرامج (SDK) للأجهزة الجوّالة أو الويب تستخدم تزامنًا متفائلاً والتحكم المستمر.

  • تستخدم مكتبات عملاء الخادم عناصر تحكم في التزامن متشائمة.

تناقص البيانات في حزم SDK للجوّال/الويب

تستخدم حِزم تطوير البرامج (SDK) للأجهزة الجوّالة أو الويب (أنظمة Apple الأساسية وAndroid والويب وC++ ) عناصر تحكّم متفائلة في التزامن من أجل وحل الخلاف على البيانات.

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

تستخدم حِزم SDK للويب/الأجهزة الجوّالة عناصر تحكّم متفائلة في التزامن، لأنّها يمكن أن تعمل بيئات ذات وقت استجابة طويل واتصال غير موثوق بالشبكة. جارٍ قفل الجهاز المستندات في بيئة وقت الاستجابة الطويلة إلى تناقص كبير في البيانات والإخفاقات.

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

تضارب البيانات في مكتبات عملاء الخادم

تستخدم مكتبات عميل الخادم (C# وGo وJava وNode.js وPHP وPython وRuby) تعمل عناصر التحكم في التزامن المتشائم على حل نزاع البيانات.

عناصر التحكّم في التزامن المتشائم
استنادًا إلى افتراض أنّ هناك احتمالاً كبيرًا لتراكم البيانات. المتشائم استخدام أقفال قاعدة البيانات لمنع العمليات الأخرى من تعديل البيانات.

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

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

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

عزل قابل للتسلسل

يرتبط التنافس على البيانات بين المعاملات ارتباطًا وثيقًا بعزل قاعدة البيانات المستويات. يصف مستوى عزل قاعدة البيانات مدى نجاح النظام التعامل مع التعارضات بين العمليات المتزامنة. يأتي الخلاف من متطلبات قاعدة البيانات التالية:

  • تتطلّب المعاملات بيانات دقيقة ومتسقة.
  • لاستخدام الموارد بكفاءة، تنفذ قواعد البيانات العمليات بشكل متزامن.

في الأنظمة ذات مستوى العزل المنخفض، تتم عملية القراءة ضمن إحدى المعاملات. بيانات غير دقيقة من التغييرات غير الملتزمة في العملية.

العزل القابل للتسلسل يحدد أعلى مستوى للعزل. قابل للتسلسل العزلة يعني ما يلي:

  • يمكنك افتراض أن قاعدة البيانات تنفذ المعاملات في سلسلة.
  • لا تتأثر المعاملات بالتغييرات غير الملتزمة في العمليات المتزامنة.

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

تضمن Cloud Firestore عزل المعاملات بشكل تسلسلي. يتم تسلسل المعاملات في Cloud Firestore وعزلها عن طريق إتمامها الوقت.

العزلة القابلة للتسلسل حسب وقت الإتمام

تحدِّد Cloud Firestore وقت إتمام كل معاملة يمثّل في نقطة زمنية واحدة. عندما تلتزم Cloud Firestore بمعاملة تغييرات في قاعدة البيانات، يمكنك افتراض أن جميع عمليات القراءة والكتابة داخل تتم المعاملة في وقت إتمام الاشتراك بالضبط.

يتطلّب التنفيذ الفعلي للمعاملة بعض الوقت. يمكن أن يؤدي تنفيذ تبدأ المعاملة قبل وقت الالتزام، وتنفيذ عمليات متعددة قد تتداخل العمليات. Cloud Firestore يلتزم بالعزلة القابلة للتسلسل ويضمن ما يلي:

  • تلتزم Cloud Firestore بالمعاملات بالترتيب حسب وقت الالتزام.
  • يعزل Cloud Firestore المعاملات عن العمليات ذات وقت الالتزام اللاحق.

وفي حالة وجود تعارض بين البيانات بين العمليات المتزامنة، تستخدم Cloud Firestore عناصر تحكّم في التزامن متفائلة ومتشائمة لحل الخلاف.

عزل ضمن معاملة

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

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

لمزيد من المعلومات حول التعارض في البيانات وكيفية حلّه، يُرجى الاطّلاع على صفحة تحديد المشاكل وحلّها.