Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Batchoperationen unter Verwendung des Object Persistence-Modells von AWS SDK for .NET
Batch Write: Einfügen und Löschen mehrerer Elemente
Für das Ablegen oder Löschen von mehrerer Objekten einer Tabelle in einer einzigen Anforderung führen Sie die folgenden Schritte aus:
-
Führen Sie die Methode
createBatchWrite
vonDynamoDBContext
aus und erstellen Sie eine Instance der KlasseBatchWrite
. -
Geben Sie die Elemente an, die Sie ablegen oder löschen möchten.
-
Um ein oder mehrere Elemente abzulegen, müssen Sie entweder die
AddPutItem
oder dieAddPutItems
-Methode verwenden. -
Um ein oder mehrere Elemente zu löschen, können Sie entweder den Primärschlüssel des Elements oder ein clientseitiges Objekt angeben, das dem Element zugewiesen ist, das Sie löschen möchten. Verwenden Sie die
AddDeleteItem
,AddDeleteItems
und dieAddDeleteKey
-Methode, um die Liste der zu löschenden Elemente anzugeben.
-
-
Rufen sie die
BatchWrite.Execute
-Methode auf, um alle angegebene Elemente einer Tabelle abzulegen und zu löschen.
Anmerkung
Bei Verwendung des Object Persistence-Modells können Sie eine beliebige Anzahl von Operationen in einem Batch angeben. Beachten Sie jedoch, dass Amazon DynamoDB die Anzahl der Operationen in einem Batch und die Gesamtgröße des Batches in einer Batchoperation einschränkt. Weitere Informationen zu den spezifischen Grenzwerten finden Sie unter BatchWriteItem. Wenn die API erkennt, dass die Batchschreibanforderung die zulässige Anzahl von Schreibanforderungen oder die maximal zulässige HTTP-Nutzlastgröße überschritten hat, teilt sie den Batch in mehrere kleinere Batch auf. Wenn eine Antwort auf eine Batchschreibanforderung unverarbeitete Elemente zurückgibt, sendet die API automatisch eine weitere Batchanforderung mit diesen unverarbeiteten Elementen.
Angenommen, Sie haben die C#-Klasse Book
definiert, die der Tabelle ProductCatalog
in DynamoDB zugewiesen ist. Im folgenden C#-Codebeispiel wird das BatchWrite
-Objekt verwendet, um zwei Elemente aus der Tabelle ProductCatalog
hochzuladen und ein Element aus dieser Tabelle zu löschen.
Beispiel
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();
Für das Ablegen oder Löschen von Objekten mehrerer Tabellen, führen Sie die folgenden Schritte aus:
-
Erstellen Sie eine Instance der
BatchWrite
-Klasse für jeden Typen und geben Sie die Elemente an, die Sie, wie im vorherigen Abschnitt beschrieben, ablegen oder löschen möchten. -
Erstellen Sie eine
MultiTableBatchWrite
-Instance mithilfe einer der folgenden Methoden:-
Führen Sie die
Combine
-Methode auf einem derBatchWrite
-Objekte aus, das Sie im vorherigen Schritt erstellt haben. -
Erstellen Sie einen
MultiTableBatchWrite
-Typ, indem Sie eine Liste vonBatchWrite
-Objekten bereitstellen. -
Führen Sie die
CreateMultiTableBatchWrite
-Methode vonDynamoDBContext
aus und übergeben Ihre Liste vonBatchWrite
-Objekten.
-
-
Rufen Sie die
Execute
-Methode vonMultiTableBatchWrite
auf, welche die angegebenen Ablege- und Löschoperationen für verschiedene Tabellen durchführt.
Angenommen, Sie haben die C#-Klassen Forum
und Thread
definiert, die den Tabellen Forum
und Thread
in DynamoDB zugewiesen sind. Nehmen wir auch an, dass für die Klasse Thread
Versioning aktiviert wurde. Da Versioning bei Verwendung von Batchoperationen nicht unterstützt wird, müssen Sie das Versioning explizit deaktivieren wie im folgendem C#-Codebeispiel gezeigt. Im Beispiel wird das MultiTableBatchWrite
-Objekt verwendet, um eine Mehrtabellenaktualisierung auszuführen.
Beispiel
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();
Ein funktionierendes Beispiel finden Sie unter Beispiel: Batch-Schreibvorgang unter Verwendung des Object Persistence-Modells von AWS SDK for .NET.
Anmerkung
Die DynamoDB-Batch-API schränkt die Anzahl von Schreibvorgängen in Batches und die Batchgröße ein. Weitere Informationen finden Sie unter BatchWriteItem. Bei der Verwendung der .NET-Object Persistence-Modell-API können Sie eine beliebige Anzahl von Operationen angeben. Wenn jedoch die Anzahl der Operationen in einem Batch oder die Größe des Batches den Grenzwert überschreiten, teilt die .NET-API die Batchschreibanforderungen in kleinere Batches auf und sendet mehrere Batchschreibanforderungen an DynamoDB.
Batch Get: Abrufen mehrerer Elemente
Um mehrere Elemente aus einer Tabelle in einer einzigen Anforderung abzurufen, führen Sie die folgenden Schritte aus:
-
Erstellen Sie eine Instance der
CreateBatchGet
-Klasse. -
Geben Sie eine Liste der abzurufenden Primärschlüssel an.
-
Rufen Sie die
Execute
-Methode auf. Die Antwort gibt die Elemente in derResults
-Eigenschaft zurück.
Im folgenden C#-Codebeispiel werden drei Elemente aus der Tabelle ProductCatalog
abgerufen. Die Elemente in dem Ergebnis sind nicht unbedingt in der gleichen Reihenfolge, in der Sie die Primärschlüssel angegeben haben.
Beispiel
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];
Um Objekte mehrerer Tabellen abzurufen, führen Sie Folgendes aus:
-
Erstellen Sie für jeden Typ eine Instance des
CreateBatchGet
-Typs und stellen die Primärschlüsselwerte bereit, die Sie von jeder Tabelle abrufen möchten. -
Erstellen Sie eine Instance der
MultiTableBatchGet
-Klasse mithilfe einer der folgenden Methoden:-
Führen Sie die
Combine
-Methode auf einem derBatchGet
-Objekte aus, das Sie im vorherigen Schritt erstellt haben. -
Erstellen Sie einen
MultiBatchGet
-Typ, indem Sie eine Liste vonBatchGet
-Objekten bereitstellen. -
Führen Sie die
CreateMultiTableBatchGet
-Methode vonDynamoDBContext
aus und übergeben Ihre Liste vonBatchGet
-Objekten.
-
-
Rufen Sie die Methode
Execute
vonMultiTableBatchGet
auf. Diese gibt die typisierten Ergebnisse in den einzelnenBatchGet
-Objekten zurück.
Im folgenden C#-Codebeispiel werden aus den Tabellen Order
und OrderDetail
unter Verwendung der Methode CreateBatchGet
mehrere Elemente abgerufen.
Beispiel
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];