Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questa guida, viene utilizzata la executeBulkOperations caratteristica di Azure SDK per JavaScript per eseguire operazioni in blocco di creazione e aggiornamento con NoSQL in Azure Cosmos DB. Questa funzionalità regola la concorrenza per partizione, gestisce automaticamente la logica di ripetizione dei tentativi per ogni singola operazione ed esegue grandi quantità (100+) di operazioni. Questa funzionalità regola automaticamente la concorrenza in modo dinamico, aumentando quando le chiamate hanno esito positivo senza essere limitate e riducendo quando si verifica la limitazione.
Prerequisiti
Un account Azure Cosmos DB per NoSQL esistente
- Se non si ha un account esistente, creare un nuovo account.
Node.js 22.x o versione successiva
Inizializzare l'ambiente di sviluppo
Per iniziare, creare un ambiente di sviluppo con un progetto iniziale e tutte le dipendenze degli sviluppatori. Per questo progetto, devi installare @azure/cosmos dallo Azure SDK per JavaScript come dipendenza di sviluppo.
Aprire un terminale in una cartella vuota.
Inizializzare un nuovo progetto Node.js.
npm initAggiornare il file appena generato
package.jsoncon questo contenuto.{ "main": "app.js", "scripts": { "start": "node app.js" } }Installare il
@azure/cosmospacchetto da Node Package Manager (npm).npm install --save @azure/cosmosImportante
La funzionalità di esecuzione in blocco è disponibile nelle versioni 4.3 o successive della
@azure/cosmoslibreria in Azure SDK per JavaScript. Se si usa una versione precedente dell'SDK, è necessario eseguire la migrazione a una versione più recente per usare queste funzionalità.
Configurare la connessione e le risorse
Usare ora il pacchetto installato per configurare la connessione a un account Azure Cosmos DB per NoSQL esistente.
Importare il tipo
CosmosCliente i tipi di supportoBulkOperationTypeePatchOperationType.const { BulkOperationType, PatchOperationType, CosmosClient } = require('@azure/cosmos');Creare una nuova istanza della
CosmosClientclasse passando le credenziali appropriate per l'account.const client = new CosmosClient({ endpoint: '<azure-cosmos-db-nosql-account-endpoint>', credential });Creare costanti per i puntatori alle risorse del database e del contenitore esistenti.
const database = client.database('<database-name>'); const container = database.container('<container-name>');
Creare un'operazione di aggiornamento/inserimento multiplo in blocco
Per iniziare, eseguire un'operazione collettiva che inserisce o aggiorna due elementi. Entrambi gli elementi sono composti in una matrice di OperationInput elementi. Le operazioni Upsert e Create devono includere, almeno, i campi identificatore univoco (id) e chiave di partizione.
Annotazioni
In questo esempio la chiave di partizione è il /category campo .
Creare due costanti per gli elementi da inserire o aggiornare nel contenitore.
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 };Creare una matrice di operazioni usando l'operazione
Upsertper entrambi gli elementi. Specificare in modo esplicito lapartitionKeyproprietà e l'elemento stesso nellaresourceBodyproprietà .const upsertOperations = [ { operationType: BulkOperationType.Upsert, partitionKey: 'gear-surf-surfboards', resourceBody: yambdaSurfboard }, { operationType: BulkOperationType.Upsert, partitionKey: 'gear-surf-surfboards', resourceBody: kiamaClassicSurfboard } ];
Analizzare la risposta dell'operazione di massa
Eseguire e quindi esaminare la risposta dell'operazione in blocco. La risposta contiene metadati relativi a ogni operazione.
Eseguire le operazioni in blocco usando il
executeBulkOperationsmetodo dellaitemsproprietà del tuo contenitore.const response = await container.items.executeBulkOperations(upsertOperations); console.log(response);Analizzare l'oggetto della risposta. La risposta contiene un codice di stato e
responseun oggetto per le operazioni riuscite. Le operazioni non riuscite includono invece unerroroggetto .npm run startAnnotazioni
Per ridurre al minimo le dimensioni del payload della risposta, impostare
contentResponseOnWriteEnabledsufalse. Questo flag è specifico per le funzionalità bulk e batch nell'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: { ... } } }, ... ]
Eseguire più operazioni in massa
Facoltativamente, è possibile eseguire altre operazioni, tra cui Read, Deletee Patch. Tutte le operazioni usate in questa sezione devono includere il campo chiave di partizione.
Suggerimento
Le operazioni Create e Upsert richiedono sia i campi id che i campi della chiave di partizione. Le operazioni rimanenti, Read, Delete, Replacee Patch richiedono solo il campo della chiave di partizione . Se i campi obbligatori non vengono specificati, l'operazione ha esito negativo.
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);