الإجراءات المخزنة والمشغلات ووظائف المعرفة من قبل المستخدم

ينطبق على: واجهة برمجة تطبيقات SQL

يوفر Azure Cosmos DB تنفيذاً متكاملاً للغة والمعاملات في JavaScript. عند استخدام واجهة برمجة تطبيقات SQL في Azure Cosmos DB، يمكنك كتابة الإجراءات المخزنة والمشغلات والوظائف المعرفة من قِبل المستخدم (UDFs) بلغة JavaScript. يمكنك كتابة المنطق الخاص بك بلغة JavaScript التي نفذت داخل مشغل قاعدة البيانات. يمكنك إنشاء وتنفيذ المشغلات والإجراءات المخزنة وUDFs باستخدام مدخل Microsoft Azure أو واجهة برمجة تطبيقات الاستعلام المتكامل بلغة JavaScript في Azure Cosmos DB أو Cosmos DB SQL API Client SDKs.

فوائد استخدام البرمجة من جانب الخادم

كتابة الإجراءات المخزنة، المشغلات، والوظائف المعرفة من قبل المستخدم (UDFs) في JavaScript تسمح لك ببناء تطبيقات غنية تتمتع بالمزايا التالية:

  • المنطق الإجرائي: JavaScript كلغة برمجة عالية المستوى توفر واجهة غنية ومألوفة للتعبير عن منطق الأعمال. يمكنك تنفيذ سلسلة من العمليات المعقدة على البيانات.

  • العمليات الذرية: عمليات قاعدة بيانات Azure Cosmos DB التي يتم إجراؤها في إجراء مخزن واحد أو مشغل واحد هي العمليات التي تسمى ذرية. تتيح هذه الوظيفة الذرية تطبيق دمج العمليات ذات الصلة في دفعة واحدة، بحيث إما أن تنجح جميع العمليات أو لا تنجح على الإطلاق.

  • الأداء: يتم تعيين بيانات JSON جوهرياً لنظام نوع لغة JavaScript. يسمح هذا التعيين بعدد من التحسينات مثل التجسيد البطيء لوثائق JSON في تجمع المخزن المؤقت وإتاحتها عند الطلب للتعليمات البرمجية المنفذة. توجد مزايا أداء أخرى مرتبطة بشحن منطق الأعمال إلى قاعدة البيانات، والتي تشمل:

    • التجميع: يمكنك تجميع العمليات مثل الإدخالات وإرسالها بشكل مجمّع. يتم تقليل تكاليف زمن انتقال حركة مرور الشبكة والنفقات العامة للمخزن لإنشاء عمليات منفصلة بشكل كبير.

    • التجميع المسبق: الإجراءات المخزنة والمشغلات وUDFs يتم تجميعها ضمنياً مسبقاً إلى تنسيق رمز البايت لتجنب تكلفة الترجمة في وقت استدعاء كل برنامج نصي. بسبب التجميع المسبق، يكون استدعاء الإجراءات المخزنة سريعاً وبصمة منخفضة.

    • التسلسل: تحتاج العمليات في بعض الأحيان إلى آلية تشغيل قد تقوم بإجراء تحديث أو تحديث إضافي للبيانات. بالإضافة إلى Atomicity، هناك أيضاً مزايا للأداء عند التنفيذ على جانب الخادم.

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

تلميح

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

المعاملات

يمكن تعريف المعاملة في قاعدة بيانات نموذجية على أنها سلسلة من العمليات التي يتم إجراؤها كوحدة عمل منطقية واحدة. توفر كل معاملة ضمانات خاصية ACID. ACID هو اختصار مشهور يرمز إلى: Atomicity وConsistency وIsolation وDurability.

  • تضمن Atomicity أن يتم التعامل مع جميع العمليات التي تتم داخل المعاملة كوحدة واحدة، وإما أنها جميعاً ملتزمة أو لا يتم الالتزام بها.

  • يضمن التناسق أن تكون البيانات دائماً في حالة صالحة عبر العمليات.

  • يضمن العزل عدم تداخل معاملتين مع بعضهما البعض - توفر العديد من الأنظمة التجارية مستويات عزل متعددة يمكن استخدامها بناءً على احتياجات التطبيق.

  • تضمن المتانة وجود أي تغيير يتم إجراؤه في قاعدة البيانات دائماً.

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

نطاق المعاملة

ترتبط الإجراءات المخزنة بحاوية Azure Cosmos ويتم تحديد نطاق تنفيذ الإجراء المخزن إلى مفتاح قسم منطقي. يجب أن تتضمن الإجراءات المخزنة قيمة مفتاح قسم منطقي أثناء التنفيذ تحدد القسم المنطقي لنطاق المعاملة. لمزيد من المعلومات، راجع مقالة تقسيم Azure Cosmos DB.

الالتزام والتراجع

يتم دمج العمليات أصلاً في نموذج برمجة Azure Cosmos DB JavaScript. ضمن وظيفة JavaScript، يتم تغليف جميع العمليات تلقائياً تحت معاملة واحدة. إذا اكتمل منطق JavaScript في إجراء مخزن دون أي استثناءات، فإن جميع العمليات داخل المعاملة تكون ملتزمة بقاعدة البيانات. عبارات مثل BEGIN TRANSACTION وCOMMIT TRANSACTION (مألوفة لقواعد البيانات العلائقية) متضمنة في Azure Cosmos DB. إذا كانت هناك أي استثناءات من البرنامج النصي، فإن وقت تشغيل Azure Cosmos DB JavaScript سيعيد المعاملة بأكملها. على هذا النحو، فإن طرح استثناء يكافئ فعلياً ROLLBACK TRANSACTION في Azure Cosmos DB.

تناسق البيانات

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

تلميح

قد لا ترى الاستعلامات التي تم تنفيذها ضمن إجراء أو مشغل مخزن تغييرات على العناصر التي تم إجراؤها بواسطة نفس معاملة البرنامج النصي. تنطبق هذه العبارة على كل من استعلامات SQL، مثل getContent().getCollection.queryDocuments()، وكذلك استعلامات اللغة المتكاملة، مثل getContext().getCollection().filter().

التنفيذ المقيد

يجب أن تكتمل جميع عمليات Azure Cosmos DB خلال مدة المهلة المحددة. الإجراءات المخزنة لها حد مهلة يبلغ 5 ثوانٍ. ينطبق هذا القيد على وظائف JavaScript - الإجراءات المخزنة والمشغلات والوظائف المعرفة من قبل المستخدم. إذا لم تكتمل العملية خلال هذا الحد الزمني، يتم التراجع عن المعاملة.

يمكنك إما التأكد من أن وظائف JavaScript الخاصة بك تنتهي في غضون المهلة الزمنية أو تنفيذ نموذج قائم على الاستمرارية للدُفعة / استئناف التنفيذ. لتبسيط تطوير الإجراءات المخزنة والمشغلات للتعامل مع الحدود الزمنية، ترجع جميع الوظائف الموجودة ضمن حاوية Azure Cosmos (على سبيل المثال، إنشاء العناصر وقراءتها وتحديثها وحذفها) قيمة منطقية تمثل ما إذا كانت هذه العملية ستكتمل أم لا. إذا كانت هذه القيمة خاطئة، فهذه إشارة إلى أن الإجراء يجب أن ينهي التنفيذ لأن البرنامج النصي يستهلك وقتاً أطول أو معدل نقل مقدَّم أكثر من القيمة التي تم تكوينها. يتم ضمان اكتمال العمليات التي يتم وضعها في قائمة الانتظار قبل أول عملية تخزين غير مقبولة في حالة اكتمال الإجراء المخزن في الوقت المناسب وعدم وضع أي طلبات أخرى في قائمة الانتظار. وبالتالي، يجب وضع العمليات في قائمة الانتظار واحدة تلو الأخرى باستخدام اصطلاح رد نداء JavaScript لإدارة تدفق التحكم في البرنامج النصي. نظراً لأن البرامج النصية يتم تنفيذها في بيئة من جانب الخادم، فإنها تخضع لحكم صارم. البرامج النصية التي تنتهك حدود التنفيذ بشكل متكرر قد يتم تمييزها بأنها غير نشطة ولا يمكن تنفيذها، ويجب إعادة إنشائها لاحترام حدود التنفيذ.

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

أزرار التشغيل

يدعم Azure Cosmos DB نوعين من المشغلات:

المسببات

يوفر Azure Cosmos DB مشغلات يمكن استدعاؤها من خلال إجراء عملية على عنصر Azure Cosmos. على سبيل المثال، يمكنك تحديد تشغيل مسبق عند إنشاء عنصر. في هذه الحالة، سيتم تشغيل المشغل المسبق قبل إنشاء العنصر. لا يمكن أن تحتوي المشغلات المسبقة على أي معلمات إدخال. إذا لزم الأمر، يمكن استخدام كائن الطلب لتحديث نص المستند من الطلب الأصلي. عندما يتم تسجيل المشغلات، يمكن للمستخدمين تحديد العمليات التي يمكن تشغيلها معها. إذا تم إنشاء مشغل باستخدام TriggerOperation.Create، فهذا يعني أن استخدام المشغل في عملية الاستبدال لن يُسمح به. للحصول على أمثلة، راجع مقالة كيفية كتابة المشغلات.

ما بعد المشغلات

على غرار المشغلات السابقة، ترتبط المشغلات اللاحقة أيضاً بعملية على عنصر Azure Cosmos ولا تتطلب أي معلمات إدخال. يتم تشغيلها بعد اكتمال العملية ولديها حق الوصول إلى رسالة الاستجابة التي تم إرسالها إلى العميل. للحصول على أمثلة، راجع مقالة كيفية كتابة المشغلات.

ملاحظة

لا تعمل المشغلات المسجلة تلقائياً عند حدوث عملياتها المقابلة (إنشاء / حذف / استبدال / تحديث). يجب أن يتم استدعاؤهم بشكل صريح عند تنفيذ هذه العمليات. لمعرفة المزيد، راجع مقالة كيفية تشغيل المشغلات.

الوظائف المعرفة بواسطة المستخدم

تُستخدم الدوال المعرفة من قبل المستخدم (UDFs) لتوسيع بناء جملة لغة استعلام SQL API وتنفيذ منطق الأعمال المخصص بسهولة. يمكن استدعاؤها فقط داخل الاستعلامات. لا تملك UDFs حق الوصول إلى كائن السياق ومن المفترض أن يتم استخدامها كلغة JavaScript فقط لحساب JavaScript. لذلك، يمكن تشغيل UDFs على النسخ المتماثلة الثانوية. للحصول على أمثلة، راجع مقالة كيفية كتابة وظائف محددة بواسطة المستخدم.

واجهة برمجة تطبيقات استعلام لغة JavaScript المتكاملة

بالإضافة إلى إصدار استعلامات باستخدام بنية استعلام SQL API، تتيح لك SDK من جانب الخادم إجراء استعلامات باستخدام واجهة JavaScript دون أي معرفة بـ SQL. تتيح لك واجهة برمجة تطبيقات استعلام JavaScript إنشاء استعلامات برمجياً عن طريق تمرير الوظائف الأصلية إلى تسلسل استدعاءات الوظائف. يتم تحليل الاستعلامات بواسطة وقت تشغيل JavaScript ويتم تنفيذها بكفاءة داخل Azure Cosmos DB. لمعرفة المزيد حول دعم واجهة برمجة التطبيقات لاستعلام JavaScript، راجع مقالة العمل باستخدام واجهة برمجة تطبيقات الاستعلام المتكاملة بلغة JavaScript. للحصول على أمثلة، راجع مقالة كيفية كتابة الإجراءات المخزنة والمشغلات باستخدام استعلام واجهة برمجة التطبيقات.Javascript

الخطوات التالية

تعرف على كيفية كتابة واستخدام الإجراءات المخزنة والمشغلات والوظائف المعرفة من قبل المستخدم في Azure Cosmos DB من خلال المقالات التالية:

هل تحاول القيام بتخطيط السعة للترحيل إلى Azure Cosmos DB؟ يمكنك استخدام معلومات حول مجموعة قاعدة البيانات الموجودة لتخطيط السعة.