Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
- Si no tiene una cuenta existente, cree una cuenta nueva.
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.
Abra un terminal en una carpeta vacía.
Inicialice un nuevo proyecto de Node.js.
npm initActualice el archivo recién generado
package.jsoncon este contenido.{ "main": "app.js", "scripts": { "start": "node app.js" } }Instale el
@azure/cosmospaquete desde el Administrador de paquetes de Node (npm).npm install --save @azure/cosmosImportante
La característica de ejecución masiva está disponible en las versiones 4.3 o posteriores de la
@azure/cosmosbiblioteca 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.
Importe el
CosmosClienttipo y losBulkOperationTypePatchOperationTypetipos auxiliares.const { BulkOperationType, PatchOperationType, CosmosClient } = require('@azure/cosmos');Cree una nueva instancia de la
CosmosClientclase pasando las credenciales adecuadas para su cuenta.const client = new CosmosClient({ endpoint: '<azure-cosmos-db-nosql-account-endpoint>', credential });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 .
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 };Cree una matriz de operaciones mediante la
Upsertoperación para ambos elementos. Especifique la propiedadpartitionKeyy el elemento en sí mismo explícitamente en la propiedadresourceBody.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.
Realice las operaciones de forma masiva mediante el
executeBulkOperationsmétodo de laitemspropiedad del contenedor.const response = await container.items.executeBulkOperations(upsertOperations); console.log(response);Analice el objeto de respuesta. La respuesta contiene un código de estado y
responseobjeto para operaciones exitosas. Las operaciones con errores incluyen unerrorobjeto en su lugar.npm run startNota:
Para minimizar el tamaño de la carga de respuesta, establezca
contentResponseOnWriteEnabledenfalse. 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);