Opérations par lots à l'aide du AWS SDK for .NET modèle de persistance des objets - Amazon DynamoDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Opérations par lots à l'aide du AWS SDK for .NET modèle de persistance des objets

Écriture par lots : insertion et suppression de plusieurs éléments

Pour insérer ou supprimer plusieurs objets dans une table en une seule demande, procédez comme suit :

  • Exécutez la méthode CreateBatchWrite du DynamoDBContext et créez une instance de la classe BatchWrite.

  • Spécifiez les éléments que vous souhaitez insérer ou supprimer.

    • Pour insérer un ou plusieurs éléments, utilisez la méthode AddPutItem ou AddPutItems.

    • Pour supprimer un ou plusieurs éléments, vous pouvez spécifier la clé primaire de l'élément ou un objet côté client qui mappe à l'élément que vous voulez supprimer. Utilisez les méthodes AddDeleteItem, AddDeleteItems et AddDeleteKey pour spécifier la liste des éléments à supprimer.

  • Appelez la méthode BatchWrite.Execute pour insérer et supprimer tous les éléments spécifiés dans la table.

Note

Lorsque vous utilisez le modèle de persistance des objets, vous pouvez spécifier un nombre quelconque d'opérations dans un lot. Notez cependant qu'Amazon DynamoDB limite le nombre d'opérations dans un lot et la taille totale du lot dans une opération par lot. Pour plus d'informations sur les limites spécifiques, consultez BatchWriteItem. S'il API détecte que votre demande d'écriture par lots a dépassé le nombre de demandes d'écriture autorisé ou dépassé la taille de HTTP charge utile maximale autorisée, il divise le lot en plusieurs lots plus petits. De plus, si une réponse à une écriture par lots renvoie des éléments non traités, elle envoie API automatiquement une autre demande de lot avec ces éléments non traités.

Supposons que vous ayez défini une classe Book C# qui mappe à la table ProductCatalog dans DynamoDB. L'exemple de code C# suivant utilise l'objet BatchWrite pour charger deux éléments et en supprimer un dans la table ProductCatalog.

Exemple
DynamoDBContext context = new DynamoDBContext(client); var bookBatch = context.CreateBatchWrite<Book>(); // 1. Specify two books to add. Book book1 = new Book { Id = 902, ISBN = "902-11-11-1111", ProductCategory = "Book", Title = "My book3 in batch write" }; Book book2 = new Book { Id = 903, ISBN = "903-11-11-1111", ProductCategory = "Book", Title = "My book4 in batch write" }; bookBatch.AddPutItems(new List<Book> { book1, book2 }); // 2. Specify one book to delete. bookBatch.AddDeleteKey(111); bookBatch.Execute();

Pour insérer ou supprimer des objets dans plusieurs tables, procédez comme suit :

  • Créez une instance de la classe BatchWrite pour chaque type, et spécifiez les éléments que vous souhaitez insérer ou supprimer, comme décrit dans la section précédente.

  • Créez une instance de MultiTableBatchWrite en utilisant l'une des méthodes suivantes :

    • Appelez la méthode Combine sur un des objets BatchWrite que vous avez créés à l'étape précédente.

    • Créez une instance du type MultiTableBatchWrite en fournissant une liste d'objets BatchWrite.

    • Exécutez la méthode CreateMultiTableBatchWrite de DynamoDBContext et transmettez votre liste d'objets BatchWrite.

  • Appelez la méthode Execute de MultiTableBatchWrite qui effectue les opérations d'insertion et de suppression spécifiées sur différentes tables.

Supposons que vous ayez défini des classes C# Forum et Thread qui mappent aux tables Forum et Thread dans DynamoDB. Supposons également que la gestion des versions est activée pour la classe Thread. Étant donné que la gestion des versions n'est pas prise en charge lors de l'utilisation d'opérations par lot, vous devez désactiver explicitement la gestion des versions comme illustré dans l'exemple de code C# suivant. L'exemple utilise l'objet MultiTableBatchWrite pour effectuer une mise à jour sur plusieurs tables.

Exemple
DynamoDBContext context = new DynamoDBContext(client); // Create BatchWrite objects for each of the Forum and Thread classes. var forumBatch = context.CreateBatchWrite<Forum>(); DynamoDBOperationConfig config = new DynamoDBOperationConfig(); config.SkipVersionCheck = true; var threadBatch = context.CreateBatchWrite<Thread>(config); // 1. New Forum item. Forum newForum = new Forum { Name = "Test BatchWrite Forum", Threads = 0 }; forumBatch.AddPutItem(newForum); // 2. Specify a forum to delete by specifying its primary key. forumBatch.AddDeleteKey("Some forum"); // 3. New Thread item. Thread newThread = new Thread { ForumName = "Amazon S3 forum", Subject = "My sample question", KeywordTags = new List<string> { "Amazon S3", "Bucket" }, Message = "Message text" }; threadBatch.AddPutItem(newThread); // Now run multi-table batch write. var superBatch = new MultiTableBatchWrite(forumBatch, threadBatch); superBatch.Execute();

Pour obtenir un exemple pratique, consultez Exemple : opération d'écriture par lots à l'aide du AWS SDK for .NET modèle de persistance des objets.

Note

Le API lot DynamoDB limite le nombre d'écritures dans un lot et limite également la taille du lot. Pour plus d'informations, consultez BatchWriteItem. Lorsque vous utilisez le. NETmodèle de persistance des objetsAPI, vous pouvez spécifier un nombre illimité d'opérations. Toutefois, si le nombre d'opérations d'un lot ou sa taille dépassent la limite, le. NETAPIdivise la demande d'écriture par lots en lots plus petits et envoie plusieurs demandes d'écriture par lots à DynamoDB.

Obtention par lots : obtention de plusieurs éléments

Pour insérer ou supprimer plusieurs éléments d'une table en une seule demande, procédez comme suit :

  • Créez une instance de la classe CreateBatchGet.

  • Spécifiez une liste de clés primaires à extraire.

  • Appelez la méthode Execute. La réponse renvoie les éléments dans la propriété Results.

L'exemple de code C# suivant extrait trois éléments de la table ProductCatalog. Les éléments dans le résultat ne sont pas nécessairement dans l'ordre dans lequel vous avez spécifié les clés primaires.

Exemple
DynamoDBContext context = new DynamoDBContext(client); var bookBatch = context.CreateBatchGet<ProductCatalog>(); bookBatch.AddKey(101); bookBatch.AddKey(102); bookBatch.AddKey(103); bookBatch.Execute(); // Process result. Console.WriteLine(bookBatch.Results.Count); Book book1 = bookBatch.Results[0]; Book book2 = bookBatch.Results[1]; Book book3 = bookBatch.Results[2];

Pour extraire des objets de plusieurs tables, procédez comme suit :

  • Pour chaque type, créez une instance du type CreateBatchGet et fournissez les valeurs de clé primaire que vous souhaitez extraire de chaque table.

  • Créez une instance de la classe MultiTableBatchGet en utilisant l'une des méthodes suivantes :

    • Appelez la méthode Combine sur un des objets BatchGet que vous avez créés à l'étape précédente.

    • Créez une instance du type MultiBatchGet en fournissant une liste d'objets BatchGet.

    • Exécutez la méthode CreateMultiTableBatchGet de DynamoDBContext et transmettez votre liste d'objets BatchGet.

  • Appelez la méthode Execute de MultiTableBatchGet qui renvoie les résultats typés dans les objets BatchGet individuels.

L'exemple de code C# suivant extrait plusieurs éléments des tables Order et OrderDetail à l'aide de la méthode CreateBatchGet.

Exemple
var orderBatch = context.CreateBatchGet<Order>(); orderBatch.AddKey(101); orderBatch.AddKey(102); var orderDetailBatch = context.CreateBatchGet<OrderDetail>(); orderDetailBatch.AddKey(101, "P1"); orderDetailBatch.AddKey(101, "P2"); orderDetailBatch.AddKey(102, "P3"); orderDetailBatch.AddKey(102, "P1"); var orderAndDetailSuperBatch = orderBatch.Combine(orderDetailBatch); orderAndDetailSuperBatch.Execute(); Console.WriteLine(orderBatch.Results.Count); Console.WriteLine(orderDetailBatch.Results.Count); Order order1 = orderBatch.Results[0]; Order order2 = orderBatch.Results[1]; OrderDetail orderDetail1 = orderDetailBatch.Results[0];