إخراج Azure Stream Analytics إلى Azure Cosmos DB

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

أساسيات Azure Cosmos DB كهدف إخراج

يكتب مخرجات Azure Cosmos DB في Stream Analytics نتائج معالجة التدفق الخاصة بك كإخراج JSON في حاويات Azure Cosmos DB الخاصة بك. إذا لم تكن معتادًا على Azure Cosmos DB، فشاهد وثائق Azure Cosmos DB للبدء.

يتصل Stream Analytics ب Azure Cosmos DB فقط من خلال واجهة برمجة تطبيقات SQL. واجهات برمجة تطبيقات Azure Cosmos DB الأخرى غير مدعومة بعد. إذا وجهت Stream Analytics إلى حسابات Azure Cosmos DB التي تم إنشاؤها باستخدام واجهات برمجة تطبيقات أخرى، فقد لا يتم تخزين البيانات بشكل صحيح. عندما تستخدم Azure Cosmos DB كمخرج، قم بتعيين وظيفتك على مستوى التوافق 1.2.

لا ينشئ Stream Analytics حاويات في قاعدة البيانات الخاصة بك. بدلاً من ذلك، يتطلب منك إنشاؤها مقدمًا. يمكنك بعد ذلك التحكم في تكاليف الفوترة لحاويات Azure Cosmos DB. يمكنك أيضًا ضبط أداء الحاويات واتساقها وسعتها مباشرة باستخدام واجهات برمجة تطبيقات Azure Cosmos DB. توضح الأقسام التالية تفاصيل بعض خيارات الحاوية لـAzure Cosmos DB.

ضبط التناسق والتوافر وزمن الانتقال

لمطابقة متطلبات تطبيقك، قم بضبط قاعدة البيانات والحاويات في Azure Cosmos DB وقم بالموازنة بين الاتساق، والتوافر، وفترة التأخير، وسرعة النقل.

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

Upserts من Stream Analytics

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

باستخدام مستوى التوافق 1.0، تقوم Stream Analytics بهذا التحديث كعملية PATCH، لذا تدعم التحديثات الجزئية للمستند. يضيف Stream Analytics خصائص جديدة أو يستبدل خاصية موجودة بشكل متزايد. ومع ذلك، تؤدي التغييرات في قيم خصائص الصفيف في مستند JSON إلى الكتابة فوق الصفيف بأكمله. أي أنه لم يتم دمج الصفيف.

باستخدام مستوى التوافق 1.2، يتغير سلوك upsert لإدخال أو استبدال المستند. يصف القسم اللاحق حول مستوى التوافق 1.2 هذا السلوك.

إذا كان مستند JSON الوارد يحتوي على حقل معرف موجود، يستخدم Azure Cosmos DB هذا الحقل تلقائيا كعمود معرف المستند. تتعامل تحليلات التدفق مع أي كتابات لاحقة بهذه الطريقة، مما يؤدي إلى أحد هذه الحالات:

  • تؤدي المعرفات الفريدة إلى الإدراج.
  • تؤدي المعرفات المكررة ومعرف المستند المعين إلى المعرف إلى upsert.
  • لم يتم تعيين معرفات مكررة ومعرف المستند إلى خطأ، بعد المستند الأول.

إذا كنت تريد حفظ كافة المستندات، بما في ذلك المستندات التي تحتوي على معرف مكرر، فقم بإعادة تسمية حقل المعرف في استعلامك (باستخدام الكلمة الأساسية AS ). اسمح لـ Azure Cosmos DB بإنشاء حقل المعرف أو استبدال المعرف بقيمة عمود آخر (باستخدام الكلمة الأساسية AS أو باستخدام إعداد معرف المستند).

تقسيم البيانات في Azure Cosmos DB

يقوم Azure Cosmos DB تلقائيًا بتغيير حجم الأقسام استنادًا إلى حمل العمل الخاص بك. استخدم حاويات غير محدودة لتقسيم بياناتك. عندما يكتب Stream Analytics إلى حاويات غير محدودة، فإنه يستخدم العديد من الكتاب المتوازيين كخطوة الاستعلام السابقة أو مخطط تقسيم الإدخال.

إشعار

يدعم Azure Stream Analytics حاويات غير محدودة فقط مع مفاتيح الأقسام في المستوى الأعلى. على سَبيل المثال، /region مدعوم. مفاتيح التقسيم المتداخلة (على سبيل المثال، /region/name) غير مدعومة.

اعتمادًا على اختيارك لمفتاح القسم، قد تتلقى هذا التحذير:

CosmosDB Output contains multiple rows and just one row per partition key. If the output latency is higher than expected, consider choosing a partition key that contains at least several hundred records per partition key.

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

يقتصر حجم التخزين للمستندات التي تنتمي إلى نفس قيمة مفتاح القسم على 20 غيغابايت ( حد حجم القسم الفعلي هو 50 غيغابايت). مفتاح التقسيم المثالي هو الذي يظهر كثيرا كمرشح في استفساراتك وله القدر الكافي لضمان أن الحل قابل للتوسع.

لا تحتاج مفاتيح القسم المستخدمة لاستعلامات Stream Analytics وAzure Cosmos DB إلى أن تكون متطابقة. بالنسبة للطوبولوجيات المتوازية بالكامل، استخدم مفتاح Input Partition كمفتاح PartitionIdقسم في استعلام Stream Analytics، لكن هذا الخيار قد لا يكون الخيار الموصى به لمفتاح الأقسام في حاوية Azure Cosmos DB.

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

بالنسبة لحاويات Azure Cosmos DB الثابتة، لا يوفر Stream Analytics أي طريقة للتكبير أو التوسع بعد امتلائها. لديهم حد أعلى من 10 غيغابايت و10000 وحدة طلب/ثانية من معدل النقل. لترحيل البيانات من حاوية ثابتة إلى حاوية غير محدودة (على سبيل المثال، واحدة بها 1000 وحدة طلب/ثانية على الأقل ومفتاح قسم)، استخدم أداة ترحيل البيانات أو مكتبة موجز التغيير.

يتم إهمال القدرة على الكتابة إلى حاويات ثابتة متعددة. لا تستخدمه لتوسيع نطاق وظيفتك في تحليلات التدفق.

معدل نقل محسن مع مستوى التوافق 1.2

باستخدام مستوى التوافق 1.2، يدعم Stream Analytics التكامل الأصلي للكتابة الجماعية في Azure Cosmos DB. باستخدام هذا التكامل، تكتب Stream Analytics بفعالية إلى قاعدة بيانات Azure Cosmos DB مع تعظيم معدل النقل والتعامل مع طلبات التقييد بكفاءة.

تتوفر آلية الكتابة المحسنة ضمن مستوى توافق جديد بسبب اختلاف في سلوك رفع مستوى الأداء. باستخدام المستويات قبل 1.2، يكون سلوك الرفع هو إدراج أو دمج المستند. باستخدام الإصدار 1.2، يتغير سلوك الرفع لإدخال أو استبدال المستند.

باستخدام المستويات قبل 1.2، يستخدم Stream Analytics إجراء مخزنا مخصصا لزيادة حجم المستندات لكل مفتاح قسم إلى Azure Cosmos DB. هناك، تكتب Stream Analytics دفعة كمعاملة. حتى عندما يواجه سجل واحد خطأ مؤقت (التقييد (throttling)، يجب على Stream Analytics إعادة محاولة الدفعة كاملة. هذا السلوك يجعل السيناريوهات التي تحتوي حتى على تقليل السرعة المعقول تباطئ.

يوضح المثال التالي وظيفتين متطابقتين في Stream Analytics تقرآن من نفس إدخال مراكز أحداث Azure. يتم تقسيم كل من وظائف Stream Analytics بشكل كامل باستخدام استعلام مرور والكتابة إلى حاويات Azure Cosmos DB متطابقة. المقاييس على اليسار من الوظيفة التي تم تكوينها بمستوى التوافق 1.0. المقاييس على اليمين مأخوذة من الوظيفة المهيأة مع 1.2. مفتاح قسم حاوية Azure Cosmos DB هو GUID فريد يأتي من حدث الإدخال.

لقطة شاشة تعرض مقارنة مقاييس Stream Analytics.

معدل الأحداث الواردة في Event Hubs أعلى بمرتين من حاويات Azure Cosmos DB (20,000 RUs) المهيأة للاستيعاب، لذا يمكنك توقع تقليل القيود في Azure Cosmos DB. ومع ذلك، فإن المهمة ذات 1.2 تكتب باستمرار بمعدل نقل أعلى (أحداث الإخراج في الدقيقة) وبأقل متوسط استخدام SU%. في بيئتك، هذا الاختلاف يعتمد على عدة عوامل أخرى. تتضمن هذه العوامل اختيار تنسيق الحدث وحجم حدث الإدخال/الرسالة ومفاتيح الأقسام والاستعلام.

لقطة شاشة تعرض مقارنة مقاييس Azure Cosmos DB.

باستخدام الإصدار 1.2، يستخدم تحليل التدفق بشكل أكثر ذكاء 100٪ من معدل النقل المتاح في Azure Cosmos DB، مع قلة إعادة التقديم بسبب تقليل السرعة أو تحديد المعدلات. يوفر هذا السلوك تجربة أفضل لأحمال العمل الأخرى مثل الاستعلامات التي تعمل على الحاوية في نفس الوقت. إذا كنت تريد معرفة كيفية توسيع نطاق Stream Analytics باستخدام Azure Cosmos DB كمتلقي لـ 1000 إلى 10000 رسالة في الثانية، فجرب نموذج مشروع Azure هذا.

معدل نقل بيانات Azure Cosmos DB متطابق باستخدام 1.0 و1.1. نوصي بشدة باستخدام مستوى التوافق 1.2 في Stream Analytics مع Azure Cosmos DB.

إعدادات Azure Cosmos DB لإخراج JSON

عند تكوين Azure Cosmos DB كمخرج في Stream Analytics، تحدد الخصائص التالية المخرج.

لقطة شاشة تعرض حقول المعلومات لدفق إخراج Azure Cosmos DB.

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

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

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

إليك مثال على الاستعلام:

    SELECT TollBoothId, PartitionId
    INTO CosmosDBOutput
    FROM Input1 PARTITION BY PartitionId

معالجة الخطأ وإعادة المحاولة

إذا حدث فشل عابر أو عدم توفر الخدمة أو التقييد أثناء إرسال Stream Analytics للأحداث إلى Azure Cosmos DB، يعيد Stream Analytics المحاولة إلى أجل غير مسمى لإنهاء العملية بنجاح. لكنه لا يحاول إعادة المحاولات لفشل غير مصرح به (رمز خطأ HTTP 401)، أو NotFound (رمز خطأ HTTP 404)، أو Forbidden (رمز خطأ HTTP 403)، أو BadRequest (رمز خطأ HTTP 400).

المشاكل الشائعة التي تسبب فشل إخراج Azure Cosmos DB

عدة حالات يمكن أن تتسبب في فشل مخرج Azure Cosmos DB. قد تنتهك بيانات المخرجات من Stream Analytics قيدا فريدا للفهرس على الحاوية، أو قد لا يكون العمود PartitionKey موجودا، أو قد لا يكون العمود Id موجودا. لمزيد من المعلومات حول قيود الفهرس الفريدة، راجع قيود المفاتيح الفريدة في Azure Cosmos DB.