Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
- Si vous n’avez pas de compte existant, créez un compte.
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.
Ouvrez un terminal dans un dossier vide.
Initialisez un nouveau projet Node.js.
npm initMettez à jour votre fichier nouvellement généré
package.jsonavec ce contenu.{ "main": "app.js", "scripts": { "start": "node app.js" } }Installez le package
@azure/cosmosà partir de Node Gestionnaire de package (npm).npm install --save @azure/cosmosImportant
La fonctionnalité d’exécution en bloc est disponible dans les versions 4.3 ou ultérieures de la
@azure/cosmosbibliothè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.
Importez le
CosmosClienttype et les types de supportBulkOperationTypeetPatchOperationType.const { BulkOperationType, PatchOperationType, CosmosClient } = require('@azure/cosmos');Créez une instance de la
CosmosClientclasse qui transmet les informations d’identification appropriées pour votre compte.const client = new CosmosClient({ endpoint: '<azure-cosmos-db-nosql-account-endpoint>', credential });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.
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 };Créez un tableau d’opérations à l’aide de l’opération
Upsertpour les deux éléments. Spécifiez explicitement lapartitionKeypropriété et l’élément lui-même dans laresourceBodyproprié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.
Effectuez les opérations en bloc à l’aide de la
executeBulkOperationsméthode de laitemspropriété de votre conteneur.const response = await container.items.executeBulkOperations(upsertOperations); console.log(response);Analysez l’objet de réponse. La réponse contient un code de statut et un objet
responsepour les opérations réussies. Les opérations ayant échoué incluent plutôt un objeterror.npm run startNote
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);