Operações em lotes usando o modelo de persistência de objetos do AWS SDK for .NET - Amazon DynamoDB

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Operações em lotes usando o modelo de persistência de objetos do AWS SDK for .NET

Gravação em lote: colocar e excluir vários itens

Para inserir ou excluir vários objetos de uma tabela em uma única solicitação, faça o seguinte:

  • Execute o método createBatchWrite de DynamoDBContext e crie uma instância da classe BatchWrite.

  • Especifique os itens que deseja inserir ou excluir.

    • Para inserir um ou mais itens, use o método AddPutItem ou AddPutItems.

    • Para excluir um ou mais itens, você pode especificar a chave primária do item ou um objeto no lado do cliente que é mapeado para o item que você deseja excluir. Use os métodos AddDeleteItem, AddDeleteItems e AddDeleteKey para especificar a lista de itens para exclusão.

  • Chame o método BatchWrite.Execute para inserir e excluir todos os itens especificados da tabela.

nota

Ao usar o modelo de persistência de objetos, você pode especificar qualquer número de operações em um lote. No entanto, observe que o Amazon DynamoDB limita o número de operações em lote e o tamanho total do lote em uma operação em lote. Para obter mais informações sobre os limites específicos, consulte BatchWriteItem. Se a API detectar que sua solicitação de gravação em lote excedeu o número permitido de solicitações de gravação ou excedeu o tamanho máximo de carga útil HTTP permitido, ela fragmentará esse lote em vários lotes menores. Além disso, se uma resposta a uma gravação em lote retornar itens não processados, a API enviará automaticamente outra solicitação em lote com esses itens não processados.

Suponha que você tenha definido uma classe Book C# que é mapeada na tabela ProductCatalog no DynamoDB. O exemplo de código C# a seguir usa o objeto BatchWrite para carregar dois itens e excluir um item da tabela ProductCatalog.

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

Para inserir ou excluir objetos de várias tabelas, faça o seguinte:

  • Crie uma instância da classe BatchWrite para cada tipo e especifique os itens que você deseja inserir ou excluir, conforme descrito na seção anterior.

  • Crie uma instância de MultiTableBatchWrite usando um dos seguintes métodos:

    • Execute o método Combine em um dos objetos BatchWrite que você criou na etapa anterior.

    • Crie uma instância do tipo MultiTableBatchWrite, fornecendo uma lista de objetos BatchWrite.

    • Execute o método CreateMultiTableBatchWrite de DynamoDBContext e passe sua lista de objetos BatchWrite.

  • Chame o método Execute de MultiTableBatchWrite, que realiza as operações de inserção e exclusão especificadas em várias tabelas.

Suponha que você tenha definido as classes C# Forum e Thread que são mapeadas nas tabelas Forum e Thread no DynamoDB. Além disso, suponha que a classe Thread tenha o versionamento habilitado. Como não há suporte ao versionamento quando operações em lote são utilizadas, você deve desabilitar explicitamente o versionamento, conforme mostrado no trecho de código C# a seguir. O exemplo usa o objeto MultiTableBatchWrite para realizar uma atualização em várias tabelas.

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

Para obter um exemplo funcional, consulte Exemplo: operação de gravação em lote usando o modelo de persistência de objetos do AWS SDK for .NET.

nota

A API de lote do DynamoDB limita o número de gravações em lote e também o tamanho do lote. Para obter mais informações, consulte BatchWriteItem. Ao usar a API do modelo de persistência de objetos .NET, é possível especificar um número qualquer de operações. No entanto, se o número de operações em um lote ou o tamanho exceder o limite, a API .NET fragmentará a solicitação de gravação em lote em lotes menores e enviará várias solicitações de gravação em lote ao DynamoDB.

Obtenção em lote: obter vários itens

Para recuperar vários itens de uma tabela em uma única solicitação, faça o seguinte:

  • Crie uma instância da classe CreateBatchGet.

  • Especifique uma lista de chaves primárias para recuperar.

  • Chame o método Execute. A resposta retorna os itens na propriedade Results.

O exemplo de código C# a seguir recupera um item da tabela ProductCatalog. Os itens no resultado não estão necessariamente na mesma ordem em que você especificou as chaves primárias.

exemplo
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];

Para recuperar objetos de várias tabelas, faça o seguinte:

  • Para cada tipo, criar uma instância do tipo CreateBatchGet e forneça os valores de chave primária que você deseja recuperar de cada tabela.

  • Crie uma instância da classe MultiTableBatchGet usando um dos seguintes métodos:

    • Execute o método Combine em um dos objetos BatchGet criados na etapa anterior.

    • Crie uma instância do tipo MultiBatchGet, fornecendo uma lista de objetos BatchGet.

    • Execute o método CreateMultiTableBatchGet de DynamoDBContext e passe sua lista de objetos BatchGet.

  • Chame o método Execute de MultiTableBatchGet, o qual retorna os resultados com tipo definido nos objetos BatchGet individuais.

O exemplo de código C# a seguir recupera vários itens das tabelas Order e OrderDetail usando o método CreateBatchGet.

exemplo
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];