ذاكرة التخزين المؤقت المتكاملة Azure Cosmos DB - نظرة عامة

ينطبق على: NoSQL

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

يتم تكوين ذاكرة التخزين المؤقت المتكاملة تلقائياً داخل البوابة المخصصة. ذاكرة التخزين المؤقت المتكاملة على جزأين:

  • ذاكرة تخزين مؤقتة للعنصر لقراءة النقاط
  • ذاكرة تخزين مؤقتة للاستعلام

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

إشعار

هل لديك أي ملاحظات حول ذاكرة التخزين المؤقت المتكاملة؟ نريد أن نسمعه! لا تتردد في مشاركة التعليقات مباشرةً مع الفريق الهندسي لـ Azure Cosmos DB:cosmoscachefeedback@microsoft.com

أعباء العمل التي تستفيد من ذاكرة التخزين المؤقت المتكاملة

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

تحتوي قراءات النقاط والاستعلامات التي تصل إلى ذاكرة التخزين المؤقت المتكاملة على تكلفة وحدة الطلب 0. تحتوي مرات الوصول إلى ذاكرة التخزين المؤقت على تكلفة أقل بكثير لكل عملية من القراءات من قاعدة البيانات الخلفية.

يجب تقييم أحمال العمل التي تناسب الخصائص التالية إذا كانت ذاكرة التخزين المؤقت المتكاملة تساعد على خفض التكاليف:

  • أحمال العمل الثقيلة للقراءة
  • العديد من قراءة النقاط المتكررة على العناصر الكبيرة
  • العديد من الاستعلامات المتكررة عالية RU
  • مفتاح القسم السريع للقراءة

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

يجب ألا تأخذ بعض أحمال العمل في الاعتبار ذاكرة التخزين المؤقت المتكاملة، بما في ذلك:

  • أعباء العمل الثقيلة للكتابة
  • نادرا ما تتكرر نقطة القراءة أو الاستعلامات
  • أحمال العمل التي تقرأ موجز التغيير

ذاكرة التخزين المؤقت للعناصر

يتم استخدام ذاكرة التخزين المؤقت للعنصر لقراءة النقاط (عمليات البحث عن المفتاح/القيمة استنادا إلى معرف العنصر ومفتاح القسم).

ملء ذاكرة التخزين المؤقت للعنصر

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

إبطال ذاكرة التخزين المؤقت للعنصر والإخلاء

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

  • تحديث العنصر أو حذفه
  • الأقل استخداماً مؤخراً (LRU)
  • وقت استبقاء ذاكرة التخزين المؤقت (بمعنى آخر، )MaxIntegratedCacheStaleness

ذاكرة التخزين المؤقت للاستعلام

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

تعبئة ذاكرة التخزين المؤقت للاستعلام

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

الاستعلام عن إخلاء ذاكرة التخزين المؤقت

يستند إخلاء ذاكرة التخزين المؤقت للاستعلام إلى العقدة التي تم توجيه الطلب من خلالها. من الممكن إخلاء الاستعلامات أو تحديثها على عقدة واحدة وليس العقد الأخرى.

  • الأقل استخداماً مؤخراً (LRU)
  • وقت استبقاء ذاكرة التخزين المؤقت (بمعنى آخر، )MaxIntegratedCacheStaleness

العمل مع ذاكرة التخزين المؤقت للاستعلام

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

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

هام

تحتوي مثيلات ذاكرة التخزين المؤقت المدمجة داخل عُقد بوابة مخصصة مختلفة على ذاكرات تخزين مؤقت مستقلة عن بعضها. إذا تم تخزين البيانات مؤقتاً داخل عقدة واحدة، فلن يتم تخزينها مؤقتاً بالضرورة في العقدة الأخرى. لا يتم ضمان توجيه صفحات متعددة من نفس الاستعلام إلى نفس عقدة البوابة المخصصة.

تناسق ذاكرة التخزين المؤقت المتكاملة

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

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

إشعار

لا تزال طلبات الكتابة مع التناسقات الأخرى تملأ ذاكرة التخزين المؤقت، ولكن للقراءة من ذاكرة التخزين المؤقت، يجب أن يكون للطلب إما جلسة عمل أو تناسق نهائي.

تناسق "Session"

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

MaxIntegratedCacheStaleness

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

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

هذا تحسين عن كيفية عمل معظم ذاكرة التخزين المؤقت ويسمح للتخصيصات الأخرى التالية:

  • يمكنك تعيين متطلبات تقصير مختلفة لكل نقطة قراءة أو استعلام
  • يمكن للعملاء المختلفين، حتى لو قاموا بتشغيل نفس النقطة قراءة أو استعلام، تكوين قيم MaxIntegratedCacheStaleness مختلفة
  • إذا كنت ترغب في تعديل تناسق القراءة للبيانات المخزنة MaxIntegratedCacheStaleness مؤقتا، فإن التغيير له تأثير فوري على تناسق القراءة

إشعار

الحد الأدنى MaxIntegratedCacheStaleness للقيمة هو 0 والقيمة القصوى هي 10 سنوات. عند عدم تكوينه بشكل صريح، يتم MaxIntegratedCacheStaleness تعيين الإعداد الافتراضي إلى 5 دقائق.

لفهم المعلمة MaxIntegratedCacheStaleness بشكل أفضل، ضع في اعتبارك المثال التالي:

الوقت Request استجابة
الوقت= 0 ثانية قم بتشغيل الاستعلام أ مع MaxIntegratedCacheStaleness = 30 ثانية إرجاع النتائج من قاعدة البيانات الخلفية (رسوم RU العادية) وملء ذاكرة التخزين المؤقت
الوقت= 0 ثانية قم بتشغيل الاستعلام B باستخدام MaxIntegratedCacheStaleness = 60 ثانية إرجاع النتائج من قاعدة البيانات الخلفية (رسوم RU العادية) وملء ذاكرة التخزين المؤقت
الوقت= 20 ثانية قم بتشغيل الاستعلام أ مع MaxIntegratedCacheStaleness = 30 ثانية إرجاع النتائج من ذاكرة التخزين المؤقت المدمجة (0 RU charge)
الوقت= 20 ثانية قم بتشغيل الاستعلام B باستخدام MaxIntegratedCacheStaleness = 60 ثانية إرجاع النتائج من ذاكرة التخزين المؤقت المدمجة (0 RU charge)
الوقت= 40 ثانية قم بتشغيل الاستعلام أ مع MaxIntegratedCacheStaleness = 30 ثانية إرجاع النتائج من قاعدة البيانات الخلفية (رسوم RU العادية) وتحديث ذاكرة التخزين المؤقت
الوقت= 40 ثانية قم بتشغيل الاستعلام B باستخدام MaxIntegratedCacheStaleness = 60 ثانية إرجاع النتائج من ذاكرة التخزين المؤقت المدمجة (0 RU charge)
الوقت= 50 ثانية قم بتشغيل الاستعلام B باستخدام MaxIntegratedCacheStaleness = 20 ثانية إرجاع النتائج من قاعدة البيانات الخلفية (رسوم RU العادية) وتحديث ذاكرة التخزين المؤقت

تعلم كيفية تكوين MaxIntegratedCacheStaleness.

تجاوز ذاكرة التخزين المؤقت المتكاملة

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

تعلم كيفية تجاوز ذاكرة التخزين المؤقت المتكاملة.

المقاييس

من المفيد مراقبة بعض المفاتيح DedicatedGateway والمقاييس IntegratedCache لذاكرة التخزين المؤقت المتكاملة. للتعرف على هذه المقاييس، راجع المقاييس المدعومة ل Microsoft.DocumentDB/DatabaseAccounts.

تتوفر جميع المقاييس الموجودة، بشكل افتراضي، من المقاييس في مدخل Microsoft Azure (وليس المقاييس الكلاسيكية):

لقطة شاشة لمدخل Azure تعرض موقع مقاييس ذاكرة التخزين المؤقت المتكاملة.

المقاييس هي إما متوسط ​​أو أقصى أو مجموع عبر جميع عُقد البوابة المخصصة. على سبيل المثال، إذا قمت بتوفير مجموعة بوابة مخصصة بخمس عقد، فإن المقاييس تعكس القيمة المجمعة عبر جميع العقد الخمس. لا يمكن تحديد قيم المقاييس لكل عقد على حدة.

استكشاف المشكلات الشائعة وإصلاحها

توضح الأمثلة أدناه كيفية تصحيح بعض السيناريوهات الشائعة:

لا يمكنني معرفة ما إذا كان تطبيقي يستخدم البوابة المخصصة

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

لا يمكنني معرفة ما إذا كانت طلباتي تصل إلى ذاكرة التخزين المؤقت المدمجة

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

أريد أن أفهم ما إذا كانت بوابتي المخصصة صغيرة جداً

تحقق من IntegratedCacheItemHitRate و IntegratedCacheQueryHitRate. تعد القيم العالية (على سبيل المثال، أعلى من 0.7-0.8) علامة جيدة على أن البوابة المخصصة كبيرة بما يكفي.

IntegratedCacheItemHitRate إذا كان أو IntegratedCacheQueryHitRateمنخفضا، فانظر إلى IntegratedCacheEvictedEntriesSize. IntegratedCacheEvictedEntriesSize إذا كان مرتفعا، فقد يعني ذلك أن حجم البوابة المخصصة الأكبر سيكون مفيدا. يمكنك التجربة عن طريق زيادة حجم البوابة المخصصة ومقارنة الجديد IntegratedCacheItemHitRate و IntegratedCacheQueryHitRate. إذا لم تحسن بوابة مخصصة أكبر أو IntegratedCacheItemHitRate IntegratedCacheQueryHitRate، فمن الممكن أن لا تكرر القراءات نفسها بما يكفي حتى تكون ذاكرة التخزين المؤقت المتكاملة مؤثرة.

أريد أن أفهم ما إذا كانت بوابتي المخصصة كبيرة جداً

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

إذا تم إخلاء معظم البيانات من ذاكرة التخزين المؤقت بسبب تجاوز MaxIntegratedCacheStaleness، بدلا من LRU، فقد تكون ذاكرة التخزين المؤقت أكبر من المطلوبة. إذا كان IntegratedCacheItemExpirationCount حجم ودمجهما IntegratedCacheQueryExpirationCount أكبر من ذلك تقريبا IntegratedCacheEvictedEntriesSize، يمكنك تجربة حجم بوابة مخصص أصغر ومقارنة الأداء.

أريد أن أفهم ما إذا كنت بحاجة إلى إضافة المزيد من عُقد البوابات المخصصة

في بعض الحالات، إذا كان وقت الاستجابة مرتفعاً بشكل غير متوقع، فقد تحتاج إلى المزيد من عُقد البوابات المخصصة بدلاً من عقد أكبر. DedicatedGatewayCPUUsage تحقق من و DedicatedGatewayMemoryUsage لتحديد ما إذا كانت إضافة المزيد من عقد البوابة المخصصة ستقلل من زمن الانتقال. من الجيد أن نضع في اعتبارنا أنه نظرا لأن جميع مثيلات ذاكرة التخزين المؤقت المتكاملة مستقلة عن بعضها البعض، فإن إضافة المزيد من عقد البوابة المخصصة لن يقلل من IntegratedCacheEvictedEntriesSize. ستؤدي إضافة المزيد من العقد إلى تحسين حجم الطلب الذي يمكن لمجموعة البوابة المخصصة التعامل معه.

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