إمكانية تسلسل المعاملات وعزلها

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

المعاملات والتنافس على البيانات

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

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

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

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

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

  • تستخدم حزم SDK للجوال/الويب عناصر تحكم متفائلة في التزامن.

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

تعارض البيانات في حزم SDK للجوال/الويب

تستخدم حزم SDK للجوال/الويب (أنظمة Apple الأساسية وAndroid وWeb و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 عناصر تحكم متفائلة ومتشائمة في التزامن لحل التنافس.

العزلة داخل المعاملة

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

مشاكل مع التنافس على البيانات

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