Effectuer des opérations en bloc dans Azure Cosmos DB pour NoSQL à l’aide du Kit de développement logiciel (SDK) Azure pour JavaScript

Dans ce guide, utilisez la executeBulkOperations fonctionnalité du Kit de développement logiciel (SDK) Azure pour JavaScript pour effectuer des opérations de création et de mise à jour en bloc dans Azure Cosmos DB pour NoSQL. Cette fonctionnalité ajuste l’accès concurrentiel par partition, gère automatiquement la logique de nouvelle tentative pour chaque opération individuelle et effectue de grandes quantités (100+) d’opérations. Cette fonctionnalité ajuste automatiquement le niveau de concurrence de manière dynamique, en augmentant lorsque les appels réussissent sans limitation et en réduisant en cas de limitation.

Prerequisites

  • Un compte Azure Cosmos DB pour NoSQL existant

  • Node.js 22.x ou version ultérieure

Initialiser votre environnement de développement

Commencez par créer un environnement de développement avec un projet initial et toutes les dépendances des développeurs. Pour ce projet, vous allez installer le @azure/cosmosKit de développement logiciel (SDK) Azure pour JavaScript comme dépendance de développement.

  1. Ouvrez un terminal dans un dossier vide.

  2. Initialisez un nouveau projet Node.js.

    npm init
    
  3. Mettez à jour votre fichier nouvellement généré package.json avec ce contenu.

    {
      "main": "app.js",
      "scripts": {
        "start": "node app.js"
      }
    }
    
  4. Installez le package @azure/cosmos à partir de Node Gestionnaire de package (npm).

    npm install --save @azure/cosmos
    

    Important

    La fonctionnalité d’exécution en bloc est disponible dans les versions 4.3 ou ultérieures de la @azure/cosmos bibliothèque dans le Kit de développement logiciel (SDK) Azure pour JavaScript. Si vous utilisez une version antérieure du Kit de développement logiciel (SDK), vous devez migrer vers une version plus récente pour utiliser ces fonctionnalités.

Configurer votre connexion et vos ressources

Utilisez maintenant le package installé pour configurer votre connexion à un compte Azure Cosmos DB pour NoSQL existant.

  1. Importez le CosmosClient type et les types de support BulkOperationType et PatchOperationType.

    const { BulkOperationType, PatchOperationType, CosmosClient } = require('@azure/cosmos');
    
  2. Créez une instance de la CosmosClient classe qui transmet les informations d’identification appropriées pour votre compte.

    const client = new CosmosClient({
        endpoint: '<azure-cosmos-db-nosql-account-endpoint>',
        credential
    });
    
  3. Créez des constantes pour les pointeurs vers vos ressources de base de données et de conteneur existantes.

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

Créer une opération multi-upsert en bloc

Commencez par effectuer une opération en bloc qui met à jour ou insère deux éléments. Les deux éléments sont organisés en un tableau d’éléments OperationInput. Upsert et Create les opérations doivent inclure, au minimum, les champs d’identificateur unique (id) et de clé de partition .

Note

Dans cet exemple, la clé de partition est le /category champ.

  1. Créez deux constantes pour insérer ou mettre à jour des éléments dans le conteneur.

    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. Créez un tableau d’opérations à l’aide de l’opération Upsert pour les deux éléments. Spécifiez explicitement la partitionKey propriété et l’élément lui-même dans la resourceBody propriété.

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

Analyser la réponse de l’opération en bloc

Exécutez puis passez en revue la réponse de l’opération par lots. La réponse contient des métadonnées sur chaque opération.

  1. Effectuez les opérations en bloc à l’aide de la executeBulkOperations méthode de la items propriété de votre conteneur.

    const response = await container.items.executeBulkOperations(upsertOperations);
    
    console.log(response);
    
  2. Analysez l’objet de réponse. La réponse contient un code de statut et un objet response pour les opérations réussies. Les opérations ayant échoué incluent plutôt un objet error.

    npm run start
    

    Note

    Pour réduire la taille de la charge utile de réponse, définissez contentResponseOnWriteEnabled à false. Cet indicateur est spécifique aux fonctionnalités en bloc et par lots du Kit de développement logiciel (SDK).

    [
      {
        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: { ... }
        }
      },
      ...
    ]
    

Effectuer des opérations en bloc supplémentaires

Si vous le souhaitez, vous pouvez effectuer d’autres opérations, notamment Read, Deleteet Patch. Toutes les opérations utilisées dans cette section doivent inclure le champ de clé de partition.

Tip

Les opérations Create et Upsert nécessitent à la fois les champs id et de clé de partition. Les opérations restantes, , Read, DeleteReplaceet Patch nécessitent uniquement le champ de clé de partition. Si les champs obligatoires ne sont pas spécifiés, l’opération échoue.

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);