تحسين تكلفة الطلب في Azure Cosmos DB
ينطبق على: NoSQL MongoDB كاساندرا العفريت جدول
توضح هذه المقالة كيفية ترجمة طلبات القراءة والكتابة إلى وحدات طلب وكيفية تحسين تكلفة هذه الطلبات. تتضمن عمليات القراءة قراءة النقاط والاستعلامات. تتضمن عمليات الكتابة إدراج العناصر واستبدالها وحذفها وتحديثها.
تُقدم قاعدة بيانات Azure Cosmos DB مجموعة غنية من عمليات قاعدة البيانات التي تعمل على العناصر داخل حاوية. تختلف التكلفة المقترنة بكل من هذه العمليات استناداً إلى وحدة المعالجة المركزية، والمدخلات/ المخرجات، والذاكرة المطلوبة لإكمال العملية. بدلاً من التفكير في موارد الأجهزة وإدارتها، يمكنك التفكير في وحدة الطلب (RU) كمقياس واحد للموارد المطلوبة لتنفيذ عمليات قاعدة بيانات متنوعة وخدمة طلب تطبيق.
قياس رسوم وحدة الطلب لطلب ما
من المهم قياس رسوم وحدات الطلب لطلباتك لفهم تكلفتها الفعلية وتقييم فعالية التحسينات الخاصة بك. يمكنك جلب هذه التكلفة باستخدام مدخل Azure أو فحص الاستجابة المرسلة من Azure Cosmos DB عبر أحد SDKs. راجع البحث عن شحن وحدة الطلب في Azure Cosmos DB للحصول على إرشادات مفصلة حول كيفية تحقيق ذلك.
قراءة البيانات: قراءة النقاط والاستعلامات
عادة ما يتم طلب عمليات القراءة في Azure Cosmos DB من الأسرع /الأكثر كفاءة إلى أبطأ / أقل كفاءة من حيث استهلاك وحدات الطلب على النحو التالي:
- تقرأ النقطة (مفتاح / قيمة البحث على معرف عنصر واحد ومفتاح القسم).
- الاستعلام باستخدام عبارة عامل تصفية ضمن مفتاح قسم واحد.
- الاستعلام دون عبارة تصفية مساواة أو نطاق على أي خاصية.
- الاستعلام دون عوامل تصفية.
دور مستوى التناسق
عند استخدام مستويات تناسق ثبات قوية أو محددة، يتم مضاعفة تكلفة وحدات الطلب لأي عملية قراءة (قراءة النقطة أو الاستعلام).
قراءة النقطة
العامل الوحيد الذي يؤثر على شحن وحدات الطلب لقراءة نقطة (بالإضافة إلى مستوى التناسق المستخدم) هو حجم العنصر المسترد. يعرض الجدول التالي تكلفة وحدات الطلب من القراءات نقطة للعناصر التي هي 1 كيلوبايت و 100 كيلوبايت في الحجم.
حجم العنصر | تكلفة قراءة نقطة واحدة |
---|---|
1 KB | وحدة الطلب |
100 KB | 10 وحدات وحدات الطلب |
نظرا لأن قراءات النقطة (عمليات البحث عن المفتاح/القيمة على معرف العنصر ومفتاح القسم) هي النوع الأكثر فعالية للقراءة، يجب التأكد من أن معرف العنصر الخاص بك له قيمة ذات معنى حتى تتمكن من إحضار العناصر بقراءة نقطة (بدلا من استعلام) عند الإمكان.
إشعار
في واجهة برمجة التطبيقات ل NoSQL، يمكن إجراء قراءات النقاط فقط باستخدام REST API أو SDKs. لا تعتبر الاستعلامات التي تقوم بالتصفية على معرف عنصر واحد ومفتاح القسم قراءة نقطة. للاطلاع على مثال باستخدام .NET SDK، راجع قراءة عنصر في Azure Cosmos DB ل NoSQL.
الاستعلامات
تعتمد وحدات طلب الاستعلامات على عدد من العوامل. على سبيل المثال، عدد عناصر Azure Cosmos DB التي تم تحميلها/إرجاعها، وعدد عمليات البحث مقابل الفهرس، ووقت تجميع الاستعلام، وما إلى ذلك من التفاصيل. يضمن Azure Cosmos DB أن نفس الاستعلام عند تنفيذه على نفس البيانات سوف يستهلك دائماً نفس عدد وحدات الطلب حتى مع تكرار عمليات التنفيذ. يمنحك ملف تعريف الاستعلام باستخدام مقاييس تنفيذ الاستعلام فكرة جيدة عن كيفية إنفاق وحدات الطلب.
في بعض الحالات قد تشاهد تسلسل استجابات 200 و 429 ووحدات طلب متغير في تنفيذ الاستعلامات المقسمة إلى صفحات، وذلك لأن الاستعلامات سيتم تشغيلها بأسرع وقت ممكن استناداً إلى وحدات البحث والتطوير المتوفرة. قد تشاهد فاصل تنفيذ استعلام إلى صفحات متعددة/رحلات دائرية بين الخادم والعميل. على سبيل المثال، قد يتم إرجاع 10,000 عنصر كصفحات متعددة، كل منها مشحون بناء على الحساب الذي تم إجراؤه لتلك الصفحة. عند جمع عبر هذه الصفحات، يجب أن تحصل على نفس عدد وحدات البحث عن وحدات الطلب كما ستحصل على الاستعلام بأكمله.
مقاييس لاستكشاف الاستعلامات وإصلاحها
يعتمد الأداء ومعدل النقل المستهلكة بواسطة الاستعلامات (بما في ذلك الدالات المعرفة من قبل المستخدم) في الغالب على نص الدالة. أسهل طريقة لمعرفة مقدار الوقت الذي يقضيه تنفيذ الاستعلام في UDF وعدد وحدات البحث التي يتم استهلاكها، هي عن طريق تمكين مقاييس الاستعلام. إذا كنت تستخدم SDK.NET، فإليك نماذج مقاييس الاستعلام التي تم إرجاعها بواسطة SDK:
Retrieved Document Count : 1
Retrieved Document Size : 9,963 bytes
Output Document Count : 1
Output Document Size : 10,012 bytes
Index Utilization : 100.00 %
Total Query Execution Time : 0.48 milliseconds
Query Preparation Times
Query Compilation Time : 0.07 milliseconds
Logical Plan Build Time : 0.03 milliseconds
Physical Plan Build Time : 0.05 milliseconds
Query Optimization Time : 0.00 milliseconds
Index Lookup Time : 0.06 milliseconds
Document Load Time : 0.03 milliseconds
Runtime Execution Times
Query Engine Execution Time : 0.03 milliseconds
System Function Execution Time : 0.00 milliseconds
User-defined Function Execution Time : 0.00 milliseconds
Document Write Time : 0.00 milliseconds
Client Side Metrics
Retry Count : 1
Request Charge : 3.19 RUs
أفضل الممارسات لتحسين تكلفة الاستعلامات
خذ بعين الاعتبار أفضل الممارسات التالية عند تحسين الاستعلامات للتكلفة:
تنظيم أنواع كيانات متعددة
حاول إنشاء أنواع كيانات متعددة ضمن عدد واحد أو أصغر من الحاويات. هذا الأسلوب يعود بفوائد ليس فقط من منظور التسعير، ولكن أيضاً لتنفيذ الاستعلام والمعاملات. يتم نطاق الاستعلامات إلى حاوية واحدة; ويتم تحديد نطاق المعاملات الذرية عبر سجلات متعددة عبر الإجراءات المخزنة/المشغلات إلى مفتاح قسم داخل حاوية واحدة. يمكن أن تقلل الكيانات العملاقة داخل الحاوية نفسها من عدد رحلات الشبكة المستديرة لحل العلاقات عبر السجلات. لذلك فإنه يزيد من الأداء من طرف إلى طرف، ويمكن المعاملات الذرية عبر سجلات متعددة لمجموعة بيانات أكبر، ونتيجة لذلك يقلل من التكاليف. إذا كان من الصعب على السيناريو الخاص بك تنظيم أنواع كيانات متعددة ضمن عدد واحد أو أصغر من الحاويات، عادة لأنك تقوم بترحيل تطبيق موجود ولا تريد إجراء أي تغييرات في التعليمات البرمجية - يجب عليك بعد ذلك التفكير في توفير معدل النقل على مستوى قاعدة البيانات.
قياس وضبط وحدات الطلب الأقل / الاستخدام الثاني
يؤثر تعقيد الاستعلام على عدد وحدات الطلب التي يتم استهلاكها لعمليةٍ ما. يؤثر عدد المسندات وطبيعة المسندات وعدد UDFs وحجم مجموعة البيانات المصدر. تؤثر كل هذه العوامل على تكلفة عمليات الاستعلام.
يوفر Azure Cosmos DB أداء يمكن التنبؤ به من حيث معدل النقل وزمن الانتقال باستخدام نموذج معدل النقل المقدمة. يتم تمثيل الإنتاجية المقدمة من حيث وحدات الطلب في الثانية، أو RU/s. وحدة الطلب (RU) هي تجريد منطقي عبر حساب الموارد مثل وحدة المعالجة المركزية والذاكرة و IO وما إلى ذلك المطلوبة لتنفيذ طلب. يتم تخصيص معدل النقل المخصص (وحدات الطلب) وتخصيصها للحاوية أو قاعدة البيانات لتوفير معدل النقل المتوقع وزمن الانتقال. يمكن معدل النقل المقدمة Azure Cosmos DB من توفير أداء قابل للتنبؤ ومتسق، وضمان زمن انتقال منخفض، وتوافر عالي على أي نطاق. تمثل وحدات الطلب العملة التي تم تسويتها التي تبسط المنطق حول عدد الموارد التي يحتاجها التطبيق.
يشير رسم الطلب الذي تم إرجاعه في عنوان الطلب إلى تكلفة استعلام معين. على سبيل المثال، إذا كان استعلام بإرجاع عناصر 1 كيلوبايت 1000، تكلفة العملية 1000. على هذا النحو، في غضون ثانية واحدة، ينفذ الخادم طلبَيْن فقط من هذا القبيل قبل أن يحد المعدل الطلبات اللاحقة. لمزيد من المعلومات، راجع وحدات الطلب وحاسبة وحدات الطلب.
كتابة البيانات
تعتمد تكلفة وحدات الطلب لكتابة عنصر على:
- حجم العنصر.
- عدد الخصائص التي يغطيها نهج الفهرسة وتحتاج إلى فهرستها.
إدراج عنصر 1 كيلوبايت دون فهرسة التكاليف حول قرابة 5.5 وحدات الطلب. استبدال عنصر تكاليف ضعف المصاريف المطلوبة لإدراج نفس العنصر.
تحسين عمليات الكتابة
أفضل طريقة لتحسين تكلفة وحدات الطلب لعمليات الكتابة هي حقوق العناصر وعدد الخصائص التي يتم فهرستها.
- تخزين العناصر الكبيرة جداً في Azure Cosmos DB يؤدي إلى ارتفاع رسوم وحدات الطلب ويمكن اعتباره نمط مضاد. على وجه الخصوص، لا تخزن محتوى ثنائي أو أجزاء كبيرة من النص لا تحتاج إلى الاستعلام عنها. أفضل الممارسات هو وضع هذا النوع من البيانات في تخزين Azure Blob وتخزين مرجع (أو ارتباط) إلى النقطة في العنصر الذي تكتبه إلى Azure Cosmos DB.
- يمكن أن يؤدي تحسين نهج الفهرسة الخاص بك إلى فهرسة الخصائص التي تصفيها الاستعلامات الخاصة بك فقط على إحداث فرق كبير في وحدات البحث التي تستهلكها عمليات الكتابة الخاصة بك. عند إنشاء حاوية جديدة، فيفهرس نهج الفهرسة الافتراضية كل خاصية موجودة في العناصر الخاصة بك. في حين أنه افتراضي جيد لأنشطة التنمية، فمن المستحسن للغاية لإعادة تقييم وتخصيص سياسة الفهرسة الخاصة بك عند الذهاب إلى الإنتاج أو عندما يبدأ حمل العمل الخاص بك لتلقي حركة الانتقال المهمة.
عند تنفيذ إدخال الجزء الأكبر من البيانات، فمن المستحسن أيضاً استخدام مكتبة المنفذ الأكبر Azure Cosmos DB كما أنها مصممة لتحسين استهلاك وحدات الطلب في هذه العمليات. اختيارياً، يمكنك أيضاً استخدام Azure Data Factory الذي تم إنشاؤه على نفس المكتبة.
الخطوات التالية
بعد ذلك يمكنك المتابعة لمعرفة المزيد حول تحسين التكلفة في Azure Cosmos DB في المقالات التالية:
- تعرف على المزيد حول التحسين للتطوير والاختبار
- تعرف على المزيد حول فهم فاتورة Azure Cosmos DB
- تعرف على المزيد حول تحسين تكلفة معدل النقل
- تعرف على المزيد حول تحسين تكلفة التخزين
- تعرف على المزيد حول تحسين تكلفة حسابات Azure Cosmos DB متعددة المناطق
- تعرف على المزيد حول سعة Azure Cosmos DB المحجوزة
- هل تحاول القيام بتخطيط السعة للترحيل إلى Azure Cosmos DB؟ يمكنك استخدام معلومات حول نظام مجموعة قاعدة البيانات الموجودة لديك لـ تخطيط السعة.
- في حال كان كل ما تعرفه هو عدد vcores والخوادم في مجموعة قاعدة البيانات الحالية، فاقرأ عن تقدير وحدات الطلب باستخدام vCores أو vCPUs
- إذا كان كل ما تعرفه هو عدد vcores والخوادم الموجودة في مجموعة قاعدة البيانات، اقرأ عن تقدير وحدات الطلب باستخدام vCores أو vCPUs