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

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

إشعار

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

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

يتيح إخراج Azure Cosmos DB في Stream Analytics كتابة نتائج معالجة الدفق كإخراج JSON في حاويات Azure Cosmos DB. لا ينشئ 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 إلى أن تكون متطابقة. توصي الطوبولوجيا المتوازية بالكامل باستخدام مفتاح قسم الإدخال، PartitionId، كمفتاح قسم لاستعلام Stream Analytics ولكن قد لا يكون هذا الخيار الموصى به لمفتاح قسم حاوية Azure Cosmos DB.

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

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

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

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

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

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

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

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

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

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

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

مع 1.2، يعد Stream Analytics أكثر ذكاء في استخدام 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.
معرف المستند اختياري. اسم العمود في أحداث الإخراج المستخدمة كمفتاح فريد يجب أن تستند إليه عمليات الإدراج أو التحديث. إذا تركته فارغا، يتم إدراج جميع الأحداث، دون خيار تحديث.

بعد تكوين إخراج 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 المحاولة إلى أجل غير مسمى لإنهاء العملية بنجاح. ولكنه لا يحاول إعادة المحاولة للفشل التالي:

  • Unauthorized (HTTP error code 401)
  • NotFound (HTTP error code 404)
  • Forbidden (HTTP error code 403)
  • BadRequest (HTTP error code 400)

المشكلات الشائعة

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

  2. PartitionKey العمود غير موجود.

  3. Id العمود غير موجود.

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