تمكين ذاكرة التخزين المؤقت المتكاملة
تمكين ذاكرة التخزين المؤقت المتكاملة
يتم تمكين ذاكرة التخزين المؤقت المتكاملة بخطوتين أساسيتين:
- إنشاء بوابة مخصصة في حساب Azure Cosmos DB ل NoSQL
- تحديث التعليمات البرمجية SDK لاستخدام البوابة للطلبات
إنشاء بوابة مخصصة
يجب توفير بوابة مخصصة في حسابك أولا. يمكن تنفيذ هذا الإجراء باستخدام المدخل وجزء "بوابة مخصصة".
كجزء من عملية التوفير، يطلب منك تكوين عدد مثيلات البوابة وSKU. تحدد هذه الإعدادات عدد العقد وحجم الحساب والذاكرة لكل عقدة بوابة. يمكن تعديل عدد العقد و SKU لاحقا حيث تزيد كمية البيانات التي تحتاجها للتخزين المؤقت.
بمجرد توفير البوابة الجديدة، يمكنك الحصول على نقطة النهاية للبوابة.
إشعار
تختلف نقطة نهاية البوابة عن نقطة النهاية النموذجية المستخدمة مع عميل Azure Cosmos DB ل NoSQL.
تحديث كود .NET SDK
لكي يستخدم عميل .NET SDK ذاكرة التخزين المؤقت المتكاملة، يجب التأكد من أن صحة ثلاثة أشياء:
- يستخدم العميل نقطة نهاية البوابة المخصصة بدلا من نقطة النهاية النموذجية
- تم تكوين العميل لاستخدام وضع البوابة بدلا من وضع الاتصال المباشر الافتراضي
- يجب تعيين مستوى تناسق العميل على جلسة عمل أو نهائية
أولا، تأكد من تعيين نقطة النهاية إلى نقطة نهاية البوابة المخصصة. عادة ما تكون Azure Cosmos DB لنقاط نهاية NoSQL بتنسيق <cosmos-account-name>.documents.azure.com. بالنسبة للبوابة المخصصة، تكون نقطة النهاية في بنية <cosmos-account-name>.sqlx.cosmos.azure.com.
بدلا من استخدام مفتاح حساب، قم بتكوين SDK لاستخدام هوية مدارة للمصادقة. التعليمات البرمجية المحدثة التالية.
using Azure.Identity;
using Microsoft.Azure.Cosmos;
string endpoint = "https://<cosmos-account-name>.sqlx.cosmos.azure.com/";
CosmosClientOptions options = new()
{
ConnectionMode = ConnectionMode.Gateway,
ConsistencyLevel = ConsistencyLevel.Session // or ConsistencyLevel.Eventual
};
// Use DefaultAzureCredential to authenticate with managed identity.
CosmosClient client = new(endpoint, new DefaultAzureCredential(), options);
إشعار
تأكد من تمكين هوية مدارة للتطبيق الخاص بك ومن منح الهوية المدارة دور Cosmos DB Built-in Data Contributor على حساب Azure Cosmos DB.
تكوين عمليات قراءة النقاط
لتكوين عملية قراءة نقطة لاستخدام ذاكرة التخزين المؤقت المتكاملة، يجب إنشاء كائن من نوع ItemRequestOptions. يمكنك، في هذا الكائن، تعيين الخاصية ConsistencyLevel يدويا على ConsistencyLevel.Session أو ConsistencyLevel.Eventual. ويمكنك استخدام متغير الخيارات في استدعاء أسلوب ReadItemAsync.
string id = "9DB28F2B-ADC8-40A2-A677-B0AAFC32CAC8";
PartitionKey partitionKey = new("56400CF3-446D-4C3F-B9B2-68286DA3BB99");
ItemRequestOptions requestOptions = new()
{
ConsistencyLevel = ConsistencyLevel.Session
};
ItemResponse<Product> response = await container.ReadItemAsync<Product>(id, partitionKey, requestOptions: requestOptions);
لمراقبة استخدام وحدة الطلب RU، استخدم الخاصية RequestCharge لمتغير الاستجابة. يستخدم أول استدعاء لعملية القراءة هذه العدد المتوقع من وحدات الطلب. في هذا المثال، سيكون RU واحدا لعملية قراءة نقطة. لا تستخدم الطلبات اللاحقة أي وحدات طلب حيث يتم سحب البيانات من ذاكرة التخزين المؤقت حتى تنتهي صلاحيتها.
Console.WriteLine($"Request charge:\t{response.RequestCharge:0.00} RU/s");
تكوين الاستعلامات
لتكوين استعلام لاستخدام ذاكرة التخزين المؤقت المتكاملة، أنشئ كائن من النوع QueryRequestOptions. يجب أيضا، في هذا الكائن، تغيير مستوى التناسق يدويا. ثم مرر متغير الخيارات إلى استدعاء الأسلوب GetItemQueryIterator.
string sql = "SELECT * FROM products";
QueryDefinition query = new(sql);
QueryRequestOptions queryOptions = new()
{
ConsistencyLevel = ConsistencyLevel.Eventual
};
FeedIterator<Product> iterator = container.GetItemQueryIterator<Product>(query, requestOptions: queryOptions);
يمكنك أيضا مراقبة استخدام وحدة الطلب RU بالحصول على الخاصية RequestCharge لكل كائن FeedResponse المقترن بكل صفحة من النتائج. إذا قمت بتجميع رسوم الطلب، فستحصل على إجمالي رسوم الطلب للاستعلام بأكمله. كما هو الحال مع قراءات النقاط، يستخدم الاستعلام الأول العدد النموذجي لوحدات الطلب. لا تستخدم أي استعلامات إضافية وحدات طلب حتى تنتهي صلاحية البيانات في ذاكرة التخزين المؤقت.
double totalRequestCharge = 0;
while(iterator.HasMoreResults)
{
FeedResponse<Product> response = await iterator.ReadNextAsync();
totalRequestCharge += response.RequestCharge;
Console.WriteLine($"Request charge:\t\t{response.RequestCharge:0.00} RU/s");
}
Console.WriteLine($"Total request charge:\t{totalRequestCharge:0.00} RU/s");