ابحث عن رسوم وحدة الطلب للعمليات في Azure Cosmos DB ل NoSQL

ينطبق على: NoSQL

يدعم Azure Cosmos DB العديد من واجهات برمجة التطبيقات، مثل SQL وMongoDB وCassandra وGremlin وTable. كل واجهة من واجهات برمجة التطبيقات لديها مجموعة خاصة بها من عمليات قاعدة البيانات. تتراوح هذه العمليات من القراءة والكتابة النقطية البسيطة إلى الاستعلامات المعقدة. تستهلك كل عملية قاعدة بيانات موارد النظام استناداً إلى تعقيد العملية.

تتم تسوية تكلفة جميع عمليات قاعدة البيانات بواسطة Azure Cosmos DB ويتم التعبير عنها بواسطة request units (RU). Request charge هي وحدات الطلب التي تستهلكها جميع عمليات قاعدة البيانات. يمكنك التفكير في وحدات الطلب على أنها عملة أداء تستخلص موارد النظام مثل CPU وIOPS والذاكرة المطلوبة لتنفيذ عمليات قاعدة البيانات التي يدعمها Azure Cosmos DB. بغض النظر عن واجهة برمجة التطبيقات التي تستخدمها للتفاعل مع الحاوية الخاصة بك، يتم دائماً قياس التكاليف بوحدات RU. سواء أكانت عملية قاعدة البيانات كتابة أم قراءة نقطة أم استعلامًا، يتم قياس التكاليف دائماً في وحدات الطلب. لمعرفة المزيد، راجع طلب الوحدات في Azure Cosmos DB.

تعرض هذه المقالة الطرق المختلفة التي يمكنك من خلالها العثور على استهلاك وحدة الطلب لأي عملية يتم تشغيلها على حاوية في Azure Cosmos DB ل NoSQL. إذا كنت تستخدم واجهة برمجة تطبيقات مختلفة، فشاهد واجهة برمجة التطبيقات ل MongoDB وواجهة برمجة التطبيقات ل Cassandra وواجهة برمجة التطبيقات ل Gremlin وواجهة برمجة التطبيقات للجدول.

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

استخدام مدخل Microsoft Azure

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. إنشاء حساب Azure Cosmos DB جديد وإطعامه بالبيانات، أو تحديد حساب Azure Cosmos DB موجود يحتوي بالفعل على بيانات.

  3. افتح جزء مستكشف البيانات وحدد الحاوية التي تريد العمل عليها.

  4. حدد New SQL Query.

  5. أدخل استعلاماً صالحاً، ثم حدد Execute Query.

  6. حدد Query Stats لعرض رسوم الطلب الفعلية للطلب الذي نفذته.

    لقطة شاشة لتكلفة طلب استعلام SQL في مدخل Microsoft Azure.

استخدم .NET عدة تطوير البرامج

تعرض الكائنات التي تم إرجاعها من .NET SDK v2 خاصية RequestCharge :

ResourceResponse<Document> fetchDocumentResponse = await client.ReadDocumentAsync(
    UriFactory.CreateDocumentUri("database", "container", "itemId"),
    new RequestOptions
    {
        PartitionKey = new PartitionKey("partitionKey")
    });
var requestCharge = fetchDocumentResponse.RequestCharge;

StoredProcedureResponse<string> storedProcedureCallResponse = await client.ExecuteStoredProcedureAsync<string>(
    UriFactory.CreateStoredProcedureUri("database", "container", "storedProcedureId"),
    new RequestOptions
    {
        PartitionKey = new PartitionKey("partitionKey")
    });
requestCharge = storedProcedureCallResponse.RequestCharge;

IDocumentQuery<dynamic> query = client.CreateDocumentQuery(
    UriFactory.CreateDocumentCollectionUri("database", "container"),
    "SELECT * FROM c",
    new FeedOptions
    {
        PartitionKey = new PartitionKey("partitionKey")
    }).AsDocumentQuery();
while (query.HasMoreResults)
{
    FeedResponse<dynamic> queryResponse = await query.ExecuteNextAsync<dynamic>();
    requestCharge = queryResponse.RequestCharge;
}

استخدم Java SDK

تعرض الكائنات التي تم إرجاعها من Java SDK طريقة getRequestCharge() :

RequestOptions requestOptions = new RequestOptions();
requestOptions.setPartitionKey(new PartitionKey("partitionKey"));

Observable<ResourceResponse<Document>> readDocumentResponse = client.readDocument(String.format("/dbs/%s/colls/%s/docs/%s", "database", "container", "itemId"), requestOptions);
readDocumentResponse.subscribe(result -> {
    double requestCharge = result.getRequestCharge();
});

Observable<StoredProcedureResponse> storedProcedureResponse = client.executeStoredProcedure(String.format("/dbs/%s/colls/%s/sprocs/%s", "database", "container", "storedProcedureId"), requestOptions, null);
storedProcedureResponse.subscribe(result -> {
    double requestCharge = result.getRequestCharge();
});

FeedOptions feedOptions = new FeedOptions();
feedOptions.setPartitionKey(new PartitionKey("partitionKey"));

Observable<FeedResponse<Document>> feedResponse = client
    .queryDocuments(String.format("/dbs/%s/colls/%s", "database", "container"), "SELECT * FROM c", feedOptions);
feedResponse.forEach(result -> {
    double requestCharge = result.getRequestCharge();
});

لمزيد من المعلومات، راجع التشغيل السريع: إنشاء تطبيق Java باستخدام حساب Azure Cosmos DB ل NoSQL.

استخدام عقدة.js عدة تطوير البرامج

تعرض الكائنات التي تم إرجاعها من Node.js SDK كائناً فرعياً headers يقوم بتعيين جميع الرؤوس التي تم إرجاعها بواسطة واجهة برمجة تطبيقات HTTP الأساسية. رسوم الطلب متاحة تحت المفتاح x-ms-request-charge :

const item = await client
    .database('database')
    .container('container')
    .item('itemId', 'partitionKey')
    .read();
var requestCharge = item.headers['x-ms-request-charge'];

const storedProcedureResult = await client
    .database('database')
    .container('container')
    .storedProcedure('storedProcedureId')
    .execute({
        partitionKey: 'partitionKey'
    });
requestCharge = storedProcedureResult.headers['x-ms-request-charge'];

const query = client.database('database')
    .container('container')
    .items
    .query('SELECT * FROM c', {
        partitionKey: 'partitionKey'
    });
while (query.hasMoreResults()) {
    var result = await query.executeNext();
    requestCharge = result.headers['x-ms-request-charge'];
}

لمزيد من المعلومات، راجع التشغيل السريع: إنشاء تطبيق Node.js باستخدام حساب Azure Cosmos DB ل NoSQL.

استخدام Python عدة تطوير البرامج

يكشف الكائن Container من Python SDK عن قاموس last_response_headers يعيّن جميع الرؤوس التي تم إرجاعها بواسطة واجهة برمجة تطبيقات HTTP الأساسية لآخر عملية تم تنفيذها. رسوم الطلب متاحة تحت المفتاح x-ms-request-charge :

new_item = {
    "id": "70b63682-b93a-4c77-aad2-65501347265f",
    "partition_key": "61dba35b-4f02-45c5-b648-c6badc0cbd79",
    "name": "Yamba Surfboard"
}
container.create_item(new_item)

request_charge = container.client_connection.last_response_headers["x-ms-request-charge"]
existing_item = container.read_item(
    item="70b63682-b93a-4c77-aad2-65501347265f"
    partition_key="61dba35b-4f02-45c5-b648-c6badc0cbd79"
)

request_charge = container.client_connection.last_response_headers["x-ms-request-charge"]

لمزيد من المعلومات، راجع التشغيل السريع: إنشاء تطبيق Python باستخدام حساب Azure Cosmos DB ل NoSQL.

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

لمعرفة المزيد حول تحسين استهلاك وحدة الطلب، راجع هذه المقالات: