Compartir a través de


Realización de operaciones masivas en Azure Cosmos DB para NoSQL mediante el SDK de Azure para JavaScript

En esta guía, use la executeBulkOperations característica del SDK de Azure para JavaScript para realizar operaciones masivas de creación y actualización en Azure Cosmos DB para NoSQL. Esta característica ajusta la simultaneidad por partición, controla automáticamente la lógica de reintento para cada operación individual y realiza grandes cantidades (más de 100) de operaciones. Esta función ajusta automáticamente la concurrencia de forma dinámica, aumentándola cuando las llamadas se realizan correctamente sin limitación y reduciéndola cuando hay limitación.

Prerrequisitos

  • Una cuenta de Azure Cosmos DB para NoSQL existente

  • Node.js 22.x o posterior

Inicialización del entorno de desarrollo

Empiece por crear un entorno de desarrollo con un proyecto inicial y todas las dependencias del desarrollador. Para este proyecto, va a instalar @azure/cosmos desde Azure SDK for JavaScript como dependencia de desarrollo.

  1. Abra un terminal en una carpeta vacía.

  2. Inicialice un nuevo proyecto de Node.js.

    npm init
    
  3. Actualice el archivo recién generado package.json con este contenido.

    {
      "main": "app.js",
      "scripts": {
        "start": "node app.js"
      }
    }
    
  4. Instale el @azure/cosmos paquete desde el Administrador de paquetes de Node (npm).

    npm install --save @azure/cosmos
    

    Importante

    La característica de ejecución masiva está disponible en las versiones 4.3 o posteriores de la @azure/cosmos biblioteca del SDK de Azure para JavaScript. Si usa una versión anterior del SDK, debe migrar a una versión más reciente para usar estas características.

Configuración de la conexión y los recursos

Ahora, use el paquete instalado para configurar la conexión a una cuenta de Azure Cosmos DB para NoSQL existente.

  1. Importe el CosmosClient tipo y los BulkOperationTypePatchOperationType tipos auxiliares.

    const { BulkOperationType, PatchOperationType, CosmosClient } = require('@azure/cosmos');
    
  2. Cree una nueva instancia de la CosmosClient clase pasando las credenciales adecuadas para su cuenta.

    const client = new CosmosClient({
        endpoint: '<azure-cosmos-db-nosql-account-endpoint>',
        credential
    });
    
  3. Cree constantes para punteros a los recursos de contenedor y base de datos existentes.

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

Creación de una operación de varios upsert en masa

Comience por ejecutar una operación en bloque que inserte o actualice dos elementos. Ambos elementos están compuestos en una matriz de OperationInput elementos. Upsert y Create las operaciones deben incluir, como mínimo, los campos identificador único (id) y clave de partición .

Nota:

En este ejemplo, la clave de partición es el /category campo .

  1. Cree dos constantes para actualizar/insertar (upsert) elementos en el contenedor.

    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. Cree una matriz de operaciones mediante la Upsert operación para ambos elementos. Especifique la propiedad partitionKey y el elemento en sí mismo explícitamente en la propiedad resourceBody.

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

Análisis de la respuesta de la operación masiva

Ejecute y revise la respuesta de la operación masiva. La respuesta contiene metadatos sobre cada operación.

  1. Realice las operaciones de forma masiva mediante el executeBulkOperations método de la items propiedad del contenedor.

    const response = await container.items.executeBulkOperations(upsertOperations);
    
    console.log(response);
    
  2. Analice el objeto de respuesta. La respuesta contiene un código de estado y response objeto para operaciones exitosas. Las operaciones con errores incluyen un error objeto en su lugar.

    npm run start
    

    Nota:

    Para minimizar el tamaño de la carga de respuesta, establezca contentResponseOnWriteEnabled en false. Esta bandera es específica de las funciones de procesamiento masivo y por lotes del 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: { ... }
        }
      },
      ...
    ]
    

Realizar más operaciones masivas

Opcionalmente, puede realizar otras operaciones, como Read, Deletey Patch. Todas las operaciones usadas en esta sección deben incluir el campo de clave de partición.

Sugerencia

Las operaciones Create y Upsert requieren tanto los campos id como clave de partición. Las operaciones restantes, Read, Delete, Replacey Patch solo requieren el campo de clave de partición . Si no se especifican los campos obligatorios, se produce un error en la operación.

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