Batchoperationen unter Verwendung des Object Persistence-Modells von AWS SDK for .NET - Amazon-DynamoDB

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 von DynamoDBContext aus und erstellen Sie eine Instance der Klasse BatchWrite.

  • 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 die AddPutItems-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 die AddDeleteKey-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 der BatchWrite-Objekte aus, das Sie im vorherigen Schritt erstellt haben.

    • Erstellen Sie einen MultiTableBatchWrite-Typ, indem Sie eine Liste von BatchWrite-Objekten bereitstellen.

    • Führen Sie die CreateMultiTableBatchWrite-Methode von DynamoDBContext aus und übergeben Ihre Liste von BatchWrite-Objekten.

  • Rufen Sie die Execute-Methode von MultiTableBatchWrite 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 der Results-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 der BatchGet-Objekte aus, das Sie im vorherigen Schritt erstellt haben.

    • Erstellen Sie einen MultiBatchGet-Typ, indem Sie eine Liste von BatchGet-Objekten bereitstellen.

    • Führen Sie die CreateMultiTableBatchGet-Methode von DynamoDBContext aus und übergeben Ihre Liste von BatchGet-Objekten.

  • Rufen Sie die Methode Execute von MultiTableBatchGet auf. Diese gibt die typisierten Ergebnisse in den einzelnen BatchGet-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];