مشاركة عبر


تنفيذ عمليات جماعية في Azure Cosmos DB لحساب NoSQL باستخدام Azure SDK لجافا سكريبت

في هذا الدليل، استخدم الميزة executeBulkOperations في Azure SDK ل JavaScript لتنفيذ عمليات إنشاء وتحديث جماعي في Azure Cosmos DB ل NoSQL. تقوم هذه الميزة بضبط التزامن لكل قسم، وتتعامل تلقائيا مع منطق إعادة المحاولة لكل عملية فردية، وتنفذ كميات كبيرة (100+) من العمليات. تقوم هذه الميزة تلقائيا بضبط التزامن ديناميكيا عن طريق زيادة نجاح المكالمات دون تقليل التقييد والتصغير عند حدوث التقييد (التقييث).

المتطلبات الأساسية

  • حساب Azure Cosmos DB ل NoSQL موجود

  • Node.js 22.x أو أحدث

قم بتهيئة بيئة التطوير الخاصة بك

ابدأ بإنشاء بيئة تطوير مع مشروع أولي وجميع تبعيات المطورين. لهذا المشروع، ستقوم بتثبيت @azure/cosmos ملف تطوير البرمجيات من Azure لجافا سكريبت كنوع من التطوير.

  1. افتح طرفية في مجلد فارغ.

  2. قم بتهيئة مشروع Node.js جديد.

    npm init
    
  3. قم بتحديث ملفك الجديد package.json بهذا المحتوى.

    {
      "main": "app.js",
      "scripts": {
        "start": "node app.js"
      }
    }
    
  4. تثبيت الحزمة @azure/cosmos من Node Package Manager (npm).

    npm install --save @azure/cosmos
    

    مهم

    ميزة التنفيذ الجماعي متوفرة في الإصدارات 4.3 أو الأحدث من المكتبة @azure/cosmos في مجموعة تطوير تطوير الأزرار لجافا سكريبت. إذا كنت تستخدم نسخة أقدم من SDK، يجب عليك الانتقال إلى إصدار أحدث لاستخدام هذه الميزات.

قم بتكوين الاتصال والموارد الخاصة بك

الآن، استخدم الحزمة المثبتة لتكوين اتصالك بحساب Azure Cosmos DB موجود لحساب NoSQL.

  1. استورد النوع CosmosClient والأنواع BulkOperationType الداعمة PatchOperationType .

    const { BulkOperationType, PatchOperationType, CosmosClient } = require('@azure/cosmos');
    
  2. أنشئ نسخة جديدة من CosmosClient الفئة تمرر بيانات الاعتماد المناسبة لحسابك.

    const client = new CosmosClient({
        endpoint: '<azure-cosmos-db-nosql-account-endpoint>',
        credential
    });
    
  3. أنشئ ثوابت للمؤشرات إلى قاعدة البيانات وموارد الحاويات الموجودة لديك.

    const database = client.database('<database-name>');
    
    const container = database.container('<container-name>');
    

إنشاء عملية متعددة الترقيات بكميات كبيرة

ابدأ بإجراء عملية بكميات كبيرة تفوق على عنصرين. كلا العنصرين مكونان من مجموعة من OperationInput العناصر. Upsert ويجب Create أن تشمل العمليات، على الأقل، المعرف الفريد (id) وحقول مفتاح التقسيم .

إشعار

في هذا المثال، مفتاح التقسيم هو الحقل /category .

  1. أنشئ ثابتين ليتم إدخال العناصر إلى الحاوية.

    const yambdaSurfboard = {
        id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb',
        category: 'gear-surf-surfboards',
        name: 'Yamba Surfboard',
        quantity: 12,
        price: 850.0,
        clearance: false
    };
    
    const kiamaClassicSurfboard = {
        id: 'bbbbbbbb-1111-2222-3333-cccccccccccc',
        category: 'gear-surf-surfboards',
        name: 'Kiama Classic Surfboard',
        quantity: 25,
        price: 790.0,
        clearance: true
    };
    
  2. أنشئ مصفوفة من العمليات باستخدام Upsert العملية لكلا العنصرين. حدد partitionKey الخاصية والعنصر نفسه بشكل صريح في الخاصية resourceBody .

    const upsertOperations = [
        {
            operationType: BulkOperationType.Upsert,
            partitionKey: 'gear-surf-surfboards',
            resourceBody: yambdaSurfboard
        },
        {
            operationType: BulkOperationType.Upsert,
            partitionKey: 'gear-surf-surfboards',
            resourceBody: kiamaClassicSurfboard
        }
    ];
    

تحليل استجابة العمليات الجماعية

شغل ثم راجع الاستجابة من العملية بالجملة. تحتوي الاستجابة على بيانات وصفية عن كل عملية.

  1. قم بتنفيذ العمليات بالجملة باستخدام executeBulkOperations طريقة items خاصية الحاوية الخاصة بك.

    const response = await container.items.executeBulkOperations(upsertOperations);
    
    console.log(response);
    
  2. تحليل موضوع الرد. تحتوي الاستجابة على رمز حالة وكائن response للعمليات الناجحة. العمليات الفاشلة تتضمن كائنا error بدلا من ذلك.

    npm run start
    

    إشعار

    لتقليل حجم حمولة الاستجابة، قم بتعيين contentResponseOnWriteEnabled على false. هذا العلم مخصص لميزات الجملة والدفعات في مجموعة تطوير البرمجيات.

    [
      {
        operationInput: {
          operationType: 'Upsert',
          id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb',
          partitionKey: 'gear-surf-surfboards',
          resourceBody: { ... }
        },
        response: {
          statusCode: 201,
          eTag: '...',
          activityId: '...',
          requestCharge: 7.23,
          resourceBody: { ... },
          diagnostics: { ... },
          headers: { ... }
        }
      },
      ...
    ]
    

قم بالمزيد من العمليات بالجملة

اختياريا، يمكنك تنفيذ عمليات أخرى مثل Read، Delete، و Patch. يجب أن تتضمن جميع العمليات المستخدمة في هذا القسم حقل مفتاح التقسيم.

تلميح

تتطلب عمليات Create و Upsert كلا من حقلي idمفتاح التقسيم و. العمليات المتبقية، Read، Delete، Replace، وتتطلب Patch فقط حقل مفتاح التقسيم . إذا لم يتم تحديد الحقول المطلوبة، تفشل العملية.

const variousOperations = [
    {
        operationType: BulkOperationType.Read,
        id: 'bbbbbbbb-1111-2222-3333-cccccccccccc',
        partitionKey: 'gear-surf-surfboards',
    },
    {
        operationType: BulkOperationType.Delete,
        id: 'bbbbbbbb-1111-2222-3333-cccccccccccc',
        partitionKey: 'gear-surf-surfboards',
    },
    {
        operationType: BulkOperationType.Patch,
        id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb',
        partitionKey: 'gear-surf-surfboards',
        resourceBody: {
            operations: [
                {
                    op: PatchOperationType.add,
                    path: '/onSale',
                    value: true
                }
            ],
        },
    }
]

const response = await container.items.executeBulkOperations(upsertOperations);