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

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

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

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

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

يحل 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" عناصر تحكّم متفائلة ومتشائمة في التزامن لحلّ الخلاف.

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

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

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

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