توضّح هذه الصفحة تعارض البيانات المعاملات، وإمكانية التسلسل، والعزل. للاطّلاع على أمثلة على رموز المعاملات، يُرجى الرجوع إلى المعاملات وعمليات الكتابة المجمّعة بدلاً من ذلك.
المعاملات وتعارض البيانات
لكي تنجح المعاملة، يجب أن تظل المستندات التي يتم استردادها من خلال عمليات القراءة الخاصة بها غير معدَّلة بواسطة عمليات خارج المعاملة. إذا حاولت عملية أخرى تغيير أحد هذه المستندات، ستدخل هذه العملية في حالة تعارض البيانات مع المعاملة.
- تضارب البيانات
- عندما تتنافس عمليتان أو أكثر للتحكّم في المستند نفسه على سبيل المثال، قد تتطلّب إحدى المعاملات أن يظل المستند متسقًا بينما تحاول عملية متزامنة تعديل قيم حقول هذا المستند.
تعمل Cloud Firestore على حلّ مشكلة تعارض البيانات من خلال تأخير إحدى العمليات أو إيقافها. تعيد Cloud Firestore مكتبات البرامج الخاصة بالعملاء تلقائيًا محاولة تنفيذ المعاملات التي يتعذّر إجراؤها بسبب تعارض البيانات. بعد عدد محدود من محاولات إعادة التنفيذ، تتعذّر عملية المعاملة ويتم عرض رسالة خطأ:
ABORTED: Too much contention on these documents. Please try again.
عند تحديد العملية التي سيتم إيقافها أو تأخيرها، يعتمد السلوك على نوع عناصر التحكّم في التزامن.
عناصر التحكّم في التزامن
وضع التزامن هو خيار قابل للضبط في قاعدة البيانات. يتوافق Cloud Firestore مع أوضاع التشغيل المتزامن التالية:
PESSIMISTIC: تفترض عناصر التحكّم المتزامنة المتشائمة أنّ هناك احتمالاً لحدوث تعارض في البيانات. تستخدم المعاملات المتشائمة أقفال قاعدة البيانات لمنع العمليات الأخرى من تعديل البيانات.باستخدام عناصر التحكّم المتزامنة المتشائمة، تضع المعاملات أقفالاً على المستندات التي تقرأها. يمنع قفل المعاملة على مستند المعاملات الأخرى وعمليات الكتابة المجمّعة وعمليات الكتابة غير المعاملات من تغيير هذا المستند. تؤدي المعاملة إلى إلغاء قفل المستندات عند وقت التنفيذ. ويتم أيضًا إلغاء عمليات الإغلاق إذا انتهت المهلة أو حدث خطأ لأي سبب.
عندما تحظر إحدى المعاملات مستندًا، يجب أن تنتظر عمليات الكتابة الأخرى إلى أن ترفع المعاملة الحظر. تكتسب المعاملات عمليات الإقفال بالترتيب الزمني.
OPTIMISTIC: تفترض عناصر التحكّم في التزامن المتفائل أنّ تعارض البيانات غير محتمل أو أنّه ليس من الفعّال الاحتفاظ بأقفال قاعدة البيانات. لا تستخدم المعاملات المتفائلة عمليات قفل قاعدة البيانات لمنع العمليات الأخرى من تغيير البيانات.باستخدام عناصر التحكّم في التزامن المتفائل، تتتبّع المعاملة جميع المستندات التي تقرأها داخل المعاملة. تُكمل المعاملة عمليات الكتابة فقط إذا لم يتم تغيير أي من هذه المستندات أثناء تنفيذ المعاملة. إذا تغيّر أي مستند، يعيد معالج المعاملات محاولة تنفيذ المعاملة. إذا تعذّر الحصول على نتيجة واضحة للمعاملة بعد عدة محاولات، ستفشل المعاملة بسبب تعارض البيانات.
الإعدادات التلقائية لوضع التشغيل المتزامن
القيمة التلقائية لإصدار Standard هي PESSIMISTIC. القيمة التلقائية لإصدار Enterprise هي OPTIMISTIC. ومع ذلك، يعتمد السلوك أيضًا على نوع مكتبة البرامج:
- تستخدم حِزم تطوير البرامج (SDK) على الأجهزة الجوّالة والويب عناصر التحكّم في التزامن المتفائل. تعمل حِزم تطوير البرامج (SDK) على الأجهزة الجوّالة والويب بشكل مستقل عن هذا الإعداد لأنّها تحاكي دائمًا التزامن المتفائل.
- تستخدم مكتبات برامج الخادم للعميل عناصر التحكّم في التزامن لإعدادات قاعدة البيانات.
عرض وضع التزامن
نفِّذ الأمر
gcloud firestore databases describe
للاطّلاع على وضع التزامن من جهة الخادم لقاعدة البيانات:
gcloud firestore databases describe \
--project=PROJECT_ID \
--database=DATABASE_ID
تغيير وضع التزامن
نفِّذ الأمر
gcloud firestore databases update
لتغيير وضع التزامن من جهة الخادم لقاعدة البيانات:
gcloud firestore databases update \
--project=PROJECT_ID \
--database=DATABASE_ID \
--concurrency-mode=CONCURRENCY_MODE
where:
- CONCURRENCY_MODE هو
PESSIMISTICأوOPTIMISTIC. - PROJECT_ID هو معرّف مشروعك Google Cloud.
- DATABASE_ID هو رقم تعريف قاعدة بيانات Cloud Firestore.
تضارب البيانات في حِزم تطوير البرامج (SDK) على الأجهزة الجوّالة والويب
تحاكي حِزم تطوير البرامج (SDK) على الأجهزة الجوّالة والويب معاملات التزامن المتفائل باستخدام شروط مسبقة للكتابة على إصدارات المستندات. تحدث هذه المحاكاة بغض النظر عن إعداد وضع التزامن في قاعدة البيانات. لا تستخدم حِزم تطوير البرامج (SDK) على الأجهزة الجوّالة والويب ميزة المعاملات المضمّنة، لذا حتى إذا تم ضبط وضع التزامن في قاعدة البيانات على PESSIMISTIC، ستظل سلوكيات العملاء على الأجهزة الجوّالة متفائلة.
تستخدم حِزم تطوير البرامج (SDK) المتوافقة مع الأجهزة الجوّالة والمواقع الإلكترونية عناصر التحكّم في التزامن المتفائل، لأنّها يمكن أن تعمل في بيئات ذات وقت استجابة مرتفع واتصال غير موثوق بالشبكة. سيؤدي قفل المستندات في بيئة ذات وقت استجابة طويل إلى حدوث الكثير من حالات فشل تنازع البيانات.
تضارب البيانات في مكتبات برامج الخادم والعميل
تستخدم مكتبات برامج الخادم (C# وGo وJava وNode.js وPHP وPython وRuby) ميزة المعاملات المضمّنة. تستخدِم هذه المعاملات إعداد وضع التزامن على مستوى قاعدة البيانات، وتعتمد القيمة التلقائية على الإصدار:
تستخدم Enterprise Edition عناصر التحكّم في التزامن المتفائل تلقائيًا لإتاحة العمليات التي تفحص جميع المجموعات. تساعد عناصر التحكّم في التزامن المتفائل على تجنُّب عمليات البحث التي يتم فيها قفل عدد كبير من المستندات.
تستخدم الإصدارات العادية عناصر التحكّم المتزامنة المتشائمة وتفترض زمن انتقال منخفضًا واتصالاً موثوقًا بقاعدة البيانات.
العزل القابل للتسلسل
يرتبط تعارض البيانات بين المعاملات ارتباطًا وثيقًا بمستويات عزل قاعدة البيانات. يصف مستوى العزل لقاعدة البيانات مدى جودة تعامل النظام مع التعارضات بين العمليات المتزامنة. ينشأ التعارض من متطلبات قاعدة البيانات التالية:
- تتطلّب المعاملات بيانات دقيقة ومتّسقة.
- لاستخدام الموارد بكفاءة، تنفّذ قواعد البيانات العمليات بشكل متزامن.
في الأنظمة التي تتضمّن مستوى عزل منخفضًا، قد تقرأ عملية قراءة ضمن إحدى المعاملات بيانات غير دقيقة من تغييرات لم يتم تنفيذها في عملية متزامنة.
تحدّد العزل التسلسلي أعلى مستوى للعزل. تعني العزلة القابلة للتسلسل ما يلي:
- يمكنك افتراض أنّ قاعدة البيانات تنفّذ المعاملات على التوالي.
- لا تتأثّر المعاملات بالتغييرات غير الملتزَم بها في العمليات المتزامنة.
ويجب أن يظل هذا الضمان ساريًا حتى عندما تنفّذ قاعدة البيانات معاملات متعددة بالتوازي. يجب أن تنفّذ قاعدة البيانات عناصر تحكّم متزامنة لحل التعارضات التي قد تؤدي إلى انتهاك هذا الضمان.
تضمن Cloud Firestore إمكانية تسلسل المعاملات. يتم تسلسل المعاملات في Cloud Firestore وعزلها حسب وقت التنفيذ.
العزل القابل للتسلسل حسب وقت الإتمام
تُعيّن Cloud Firestore وقت إتمام لكل عملية يمثّل نقطة زمنية واحدة. عندما تنفّذ Cloud Firestore تغييرات إحدى المعاملات في قاعدة البيانات، يمكنك افتراض أنّ جميع عمليات القراءة والكتابة ضمن المعاملة تتم في وقت التنفيذ بالضبط.
يتطلّب التنفيذ الفعلي للمعاملة فترة زمنية معيّنة. يبدأ تنفيذ المعاملة قبل وقت التنفيذ، وقد يتداخل تنفيذ عمليات متعددة. تلتزم Cloud Firestore بمستوى العزل القابل للتسلسل وتضمن ما يلي:
- تنفّذ Cloud Firestore المعاملات بالترتيب حسب وقت التنفيذ.
- تعزل Cloud Firestore المعاملات عن العمليات المتزامنة التي يكون وقت تنفيذها لاحقًا.
في حال حدوث تعارض في البيانات بين العمليات المتزامنة، تستخدم Cloud Firestore عناصر التحكّم المتزامنة المتفائلة والمتشائمة لحلّ التعارض.
العزل ضمن المعاملة
ينطبق عزل المعاملات أيضًا على عمليات الكتابة ضمن إحدى المعاملات. لا يمكن أن ترى طلبات البحث والقراءة داخل إحدى المعاملات نتائج عمليات الكتابة السابقة داخل تلك المعاملة. حتى إذا عدّلت مستندًا أو حذفته ضمن إحدى المعاملات، ستعرض جميع عمليات قراءة المستندات في تلك المعاملة نسخة المستند في وقت التنفيذ، أي قبل عمليات الكتابة في المعاملة. لا تعرض عمليات القراءة أي نتائج إذا لم يكن المستند متوفّرًا في ذلك الوقت.
مشاكل متعلّقة بتعارض البيانات
لمزيد من المعلومات حول تعارض البيانات وكيفية حلّها، يمكنك الاطّلاع على صفحة تحديد المشاكل وحلّها.