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

ينطبق على: NoSQL

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

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

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

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

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

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

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

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

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

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

تلميح

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

إشعار

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

الحركات

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

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

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

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

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

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

تلميح

لدعم المعاملات في Azure Cosmos DB ل NoSQL، يمكنك أيضا تنفيذ دفعة معاملات باستخدام SDK العميل المفضل لديك. لمزيد من المعلومات، راجع عمليات دفعة المعاملات في Azure Cosmos DB ل NoSQL.

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

ترتبط الإجراءات المخزنة بحاوية Azure Cosmos DB ويتم تحديد نطاق تنفيذ الإجراء المخزن إلى مفتاح قسم منطقي. يجب أن تتضمن الإجراءات المخزنة قيمة مفتاح قسم منطقي أثناء التنفيذ تحدد القسم المنطقي لنطاق المعاملة. لمزيد من المعلومات، راجع مقالة تقسيم 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 DB. تضمن هذه الميزة أن توفر القراءات من الإجراءات المخزنة تناسقاً قوياً. يمكن تنفيذ الاستعلامات التي تستخدم وظائف معرّفة من قبل المستخدم على النسخة المتماثلة الأساسية أو أي نسخة متماثلة ثانوية. تهدف الإجراءات المخزنة والمشغلات إلى دعم عمليات الكتابة في المعاملات. وفي الوقت نفسه، يتم تنفيذ منطق القراءة فقط على أفضل وجه كمنطق من جانب التطبيق والاستعلامات باستخدام Azure Cosmos DB ل NoSQL SDKs، والتي ستساعدك على تشبع معدل نقل قاعدة البيانات.

تلميح

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

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

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

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

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

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

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

المشغلات السابقة

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

المشغلات اللاحقة

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

إشعار

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

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

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

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

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

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

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

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