إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ينطبق على: NoSQL
توفر معاملات قاعدة البيانات نموذج برمجة آمن، ويمكن التنبؤ به للتعامل مع التغييرات المتزامنة على البيانات. تسمح لك قواعد البيانات الارتباطية التقليدية، مثل SQL Server، بكتابة منطق العمل باستخدام الإجراءات والمشغلات المخزنة، ثم إرسالها إلى الخادم للتنفيذ مباشرة داخل محرك قاعدة البيانات.
مع قواعد البيانات الارتباطية التقليدية، يطلب منك التعامل مع لغتين مختلفتين للبرمجة: لغة برمجة تطبيقات غير عملية، مثل JavaScript أو Python أو C# أو Java؛ ولغة برمجة التطبيقات غير العملياتية؛ ولغة برمجة التطبيقات غير النشطة؛ ولغة برمجة التطبيقات؛ ولغة برمجة التطبيقات غير النشطة؛ ولغة برمجة التطبيقات؛ ولغة برمجة التطبيقات غير النشطة؛ ولغة برمجة التطبيقات غير النشطة؛ ولغة برمجة التطبيقات؛ ولغة برمجة التطبيقات غير النشطة؛ ولغة برمجة التطبيقات غير النشطة؛ ولغة برمجة التطبيقات؛ ولغة برمجة التطبيقات؛ و ولغة برمجة المعاملات، مثل T-SQL، التي يتم تنفيذها في الأصل بواسطة قاعدة البيانات.
يدعم محرك قاعدة البيانات في Azure Cosmos DB المعاملات المتوافقة مع ACID الكامل (الذرية والاتساق والعزل والمتانة) مع عزل اللقطة. All the database operations within the scope of a container's logical partition are transactionally executed within the database engine that's hosted by the replica of the partition. تتضمن هذه العمليات كل من الكتابة (تحديث عنصر واحد أو أكثر داخل القسم المنطقي)، وعمليات القراءة.
يسرد الجدول التالي العمليات وأنواع المعاملات المختلفة:
| Operation | Operation type | معاملة فردية أو متعددة العناصر |
|---|---|---|
| إدراج (دون مشغّل ما قبل/ بعد) | Write | عملية عنصر واحد |
| إدراج (مع مشغّل ما قبل/ بعد) | الكتابة والقراءة | Multi-item transaction |
| استبدال (دون مشغّل ما قبل/ بعد) | Write | عملية عنصر واحد |
| استبدال (مع مشغّل ما قبل/ بعد) | الكتابة والقراءة | Multi-item transaction |
| Upsert (دون مشغّل ما قبل/ بعد) | Write | عملية عنصر واحد |
| Upsert (مع مشغّل ما قبل/ بعد) | الكتابة والقراءة | Multi-item transaction |
| حذف (دون مشغّل ما قبل/ بعد) | Write | عملية عنصر واحد |
| حذف (مع مشغّل ما قبل/ بعد) | الكتابة والقراءة | Multi-item transaction |
| تنفيذ الإجراء المخزن | الكتابة والقراءة | Multi-item transaction |
| بدأ النظام تنفيذ إجراء دمج | Write | Multi-item transaction |
| بدأ النظام تنفيذ حذف العناصر استنادًا إلى انتهاء صلاحية (TTL) عنصر | Write | Multi-item transaction |
| Read | Read | Single-item transaction |
| Change feed | Read | Multi-item transaction |
| Paginated read | Read | Multi-item transaction |
| Paginated query | Read | Multi-item transaction |
| تنفيذ UDF كجزء من الاستعلام المُرقم | Read | Multi-item transaction |
Multi-item transactions
يسمح لك Azure Cosmos DB بكتابة الإجراءات المخزنة والمشغلات والوظائف المعرفة من قبل المستخدم وإجراءات الدمج في JavaScript. تدعم قاعدة البيانات Azure Cosmos تنفيذ JavaScript داخل محرك قاعدة البيانات الخاص به. يمكنك تسجيل الإجراءات المخزنة، والمشغلات السابقة/اللاحقة، والوظائف المعرفة من قبل المستخدم (UDFs)، وإجراءات الدمج على حاوية وتنفيذها لاحقا بشكل معاملات داخل محرك قاعدة بيانات Azure Cosmos DB. كتابة منطق التطبيق في JavaScript يسمح التعبير الطبيعي للتحكم في التدفق، وتحديد النطاق المتغير، والتعيين، والتكامل بين الاستثناءات، والتعامل مع البدائيات داخل معاملات قاعدة البيانات مباشرة في لغة JavaScript.
يتم التفاف إجراءات تخزين JavaScript المستندة إلى مشغلات UDFs، وإجراءات دمج ضمن معاملة ACID المحيطة مع عزل لقطة عبر كل العناصر داخل القسم المنطقي. أثناء تنفيذه، إذا طرح برنامج JavaScript استثناء، يتم إجهاض المعاملة بأكملها وتراجعها. نموذج البرمجة الناتج بسيط؛ ولكنه قوي. يحصل مطوري JavaScript على نموذج برمجة دائم في حين لا يزالوا يستخدمون لغتهم المألوفة والمكتبة البدائية.
القدرة على تنفيذ JavaScript مباشرةً داخل مشغل قاعدة البيانات يوفر الأداء، وتنفيذ المعاملات من عمليات قاعدة البيانات ضد عناصر حاوية. علاوة على ذلك، نظرا لأن محرك قاعدة بيانات Azure Cosmos DB يدعم في الأصل JSON وJavaScript، فلا يوجد عدم تطابق معوق بين أنظمة نوع التطبيق وقاعدة البيانات.
التحكم في التزامن غير المؤمن
يسمح لك التحكم المتفائل في التزامن (OCC) بمنع التحديثات والحذف المفقودة. التزامن، يتم عرض عمليات المتعارضة تأمين غير مؤمنة عادية لمشغل قاعدة البيانات التي استضافه القسم المنطقي الذي يملك العنصر. عندما تحاول عمليتان متزامنتان تحديث أحدث إصدار من عنصر داخل قسم منطقي، تفوز إحداهما وتفشل الأخرى. ومع ذلك، إذا كانت عملية واحدة أو عمليتين تحاولان تحديث العنصر نفسه بشكل متزامن قد قرأت مسبقا قيمة قديمة للعنصر، فإن قاعدة البيانات لا تعرف ما إذا كانت قيمة القراءة السابقة لأي من العمليات المتعارضة أو كلتيهما هي بالفعل أحدث قيمة للعنصر.
لحسن الحظ، يمكن الكشف عن هذا الموقف مع OCC قبل السماح للعمليات بإدخال حد المعاملة داخل محرك قاعدة البيانات. يحمي OCC بياناتك من الكتابة فوق التغييرات التي أجراها الآخرون عن طريق الخطأ. كما أنه يمنع الآخرين من الكتابة فوق التغييرات الخاصة بك عن طريق الخطأ.
تنفيذ التحكم المتفائل في التزامن باستخدام عناوين ETag وHTTP
يحتوي كل عنصر مخزن في حاوية Azure Cosmos DB على خاصية محددة _etag من قبل النظام. يتم إنشاء قيمة _etag تلقائيا وتحديثها بواسطة الخادم في كل مرة يتم فيها تحديث العنصر.
_etag يمكن استخدامها مع عنوان الطلب المقدم if-match من العميل للسماح للخادم بتحديد ما إذا كان يمكن تحديث عنصر بشكل مشروط. إذا تطابقت قيمة if-match العنوان مع قيمة _etag على الخادم، يتم تحديث العنصر بعد ذلك. إذا لم تعد قيمة if-match عنوان الطلب حالية، يرفض الخادم العملية برسالة استجابة "فشل الشرط المسبق HTTP 412". يمكن للعميل بعد ذلك إعادة تعبئة العنصر للحصول على الإصدار الحالي من العنصر على الخادم أو تجاوز إصدار العنصر في الخادم بقيمته الخاصة _etag للعنصر. بالإضافة إلى ذلك، _etag يمكن استخدامها مع if-none-match العنوان لتحديد ما إذا كانت هناك حاجة إلى إعادة تعبئة مورد.
تتغير قيمة العنصر _etag في كل مرة يتم فيها تحديث العنصر. بالنسبة لعمليات استبدال العنصر، if-match يجب التعبير عنها بشكل صريح كجزء من خيارات الطلب. على سبيل المثال، راجع نموذج التعليمات البرمجية في GitHub.
_etag يتم التحقق ضمنيا من القيم لكافة العناصر المكتوبة التي تم لمسها بواسطة الإجراء المخزن. إذا تم الكشف عن أي تعارض، يعيد الإجراء المخزن المعاملة ويطرح استثناء. باستخدام هذا الأسلوب، يتم تطبيق إمّا كل الكتابات، أو لا أحد منها ضمن الإجراء المخزن تلقائيًا. هذه إشارة إلى التطبيق لإعادة تطبيق التحديثات، وإعادة محاولة طلب العميل الأصلي.
التحكم في التزامن المتفائل والتوزيع العمومي
تخضع التحديثات المتزامنة لأي عنصر إلى التحكم المتزامن غير المُؤمن (OCC) من خلال طبقة بروتوكول الاتصال الخاصة بقاعدة بيانات Azure Cosmos. For Azure Cosmos DB accounts configured for single-region writes, Azure Cosmos DB ensures that the client-side version of the item that you're updating (or deleting) is the same as the version of the item in the Azure Cosmos DB container. يضمن ذلك أن تكون كتاباتك محمية من الكتابة فوقها بطريق الخطأ من خلال كتابات الآخرين، والعكس بالعكس. في بيئة متعددة المستخدمين، يحميك عنصر تحكم التزامن المتفائل من حذف أو تحديث الإصدار الخطأ من عنصر عن طريق الخطأ. على هذا النحو، يتم حماية العناصر ضد "التحديث المفقود" سيئ السمعة، أو "حذف المفقود" المشكلات.
In an Azure Cosmos DB account configured with multi-region writes, data can be committed independently into secondary regions if its _etag matches that of the data in the local region. بمجرد تثبيت البيانات الجديدة محليا في منطقة ثانوية، يتم دمجها بعد ذلك في المركز أو المنطقة الأساسية. إذا قام نهج حل التعارض بدمج البيانات الجديدة في منطقة المركز، نسخ هذه البيانات بشكل عام مع الجديد _etag. إذا رفض نهج حل التعارض البيانات الجديدة، يتم التراجع عن المنطقة الثانوية إلى البيانات الأصلية و _etag.
Next steps
تعرف على المزيد حول معاملات قاعدة البيانات والتحكم المتفائل في التزامن: