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
deDynamoDBContext
e crie uma instância da classeBatchWrite
. -
Especifique os itens que deseja inserir ou excluir.
-
Para inserir um ou mais itens, use o método
AddPutItem
ouAddPutItems
. -
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
eAddDeleteKey
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 objetosBatchWrite
que você criou na etapa anterior. -
Crie uma instância do tipo
MultiTableBatchWrite
, fornecendo uma lista de objetosBatchWrite
. -
Execute o método
CreateMultiTableBatchWrite
deDynamoDBContext
e passe sua lista de objetosBatchWrite
.
-
-
Chame o método
Execute
deMultiTableBatchWrite
, 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 propriedadeResults
.
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 objetosBatchGet
criados na etapa anterior. -
Crie uma instância do tipo
MultiBatchGet
, fornecendo uma lista de objetosBatchGet
. -
Execute o método
CreateMultiTableBatchGet
deDynamoDBContext
e passe sua lista de objetosBatchGet
.
-
-
Chame o método
Execute
deMultiTableBatchGet
, o qual retorna os resultados com tipo definido nos objetosBatchGet
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];