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.
Arbeiten mit Elementen in DynamoDB mithilfe des AWS SDK for .NET-Dokumentmodells
Die folgenden Codebeispiele zeigen, wie Sie eine Vielzahl von Operationen mit dem AWS SDK for .NET-Dokumentmodell durchführen können. Sie können diese Beispiele verwenden, um CRUD-, Batch- und Transaktionsoperationen durchzuführen.
Themen
Um Datenoperationen mit dem Dokumentmodell durchzuführen, müssen Sie zunächst die Table.LoadTable
-Methode aufrufen, die eine Instance der Table
-Klasse erstellt, diese wiederum stellt eine bestimmte Tabelle dar. Das folgende C#-Beispiel erstellt ein Table
-Objekt, das die Tabelle ProductCatalog
in Amazon DynamoDB darstellt.
Beispiel
Table table = Table.LoadTable(client, "ProductCatalog");
Anmerkung
Im Allgemeinen nutzen Sie die LoadTable
-Methode einmal zu Beginn der Anwendung, da sie einen DescribeTable
-Aufruf durchführt, welcher der Umlaufzeit auf DynamoDB hinzugefügt wird.
Sie können dann das Table
-Objekt nutzen, um verschiedene Datenoperationen durchzuführen. Jeder dieser Datenvorgänge hat zwei Überlastungsarten. Eine, die die minimal erforderlichen Parameter verwendet, und eine andere, die auch vorgangsspezifische optionale Konfigurationsinformationen verwendet. Wenn Sie beispielsweise ein Element abrufen, müssen Sie den Primärschlüsselwert der Tabelle angeben. In solchen Fällen können Sie die folgende GetItem
-Überlastung verwenden:
Beispiel
// Get the item from a table that has a primary key that is composed of only a partition key. Table.GetItem(Primitive partitionKey); // Get the item from a table whose primary key is composed of both a partition key and sort key. Table.GetItem(Primitive partitionKey, Primitive sortKey);
Sie können auch optionale Parameter an diese Methoden weiterleiten. Das vorangehende GetItem
gibt zum Beispiel das gesamte Element einschließlich aller Attribute zurück. Sie können optional eine Liste der abzurufenden Attribute angeben. In diesem Fall nutzen Sie die folgende GetItem
-Überlastung, die den vorgangsspezifischen Konfigurationsobjektparameter aufnimmt:
Beispiel
// Configuration object that specifies optional parameters. GetItemOperationConfig config = new GetItemOperationConfig() { AttributesToGet = new List<string>() { "Id", "Title" }, }; // Pass in the configuration to the GetItem method. // 1. Table that has only a partition key as primary key. Table.GetItem(Primitive partitionKey, GetItemOperationConfig config); // 2. Table that has both a partition key and a sort key. Table.GetItem(Primitive partitionKey, Primitive sortKey, GetItemOperationConfig config);
Sie können das Konfigurationsobjekt verwenden, um mehrere optionale Parameter, wie etwa das Anfordern einer bestimmten Attributliste oder das Angeben der Seitengröße (Anzahl der Elemente pro Seite), anzugeben. Jede Datenoperationsmethode verfügt über eigene Konfigurationsklassen. Beispielsweise können Sie die GetItemOperationConfig
-Klasse verwenden, um Optionen für die GetItem
-Operation bereitzustellen. Sie können die PutItemOperationConfig
-Klasse verwenden, um Optionen für die PutItem
-Operation bereitzustellen.
In den folgenden Abschnitten werden alle Datenoperationen beschrieben, die von der Table
-Klasse unterstützt werden.
Einfügen eines Elements – Table.PutItem method
Die PutItem
-Methode lädt die Eingabe-Document
-Instance in die Tabelle hoch. Wenn ein Element, das über einen Primärschlüssel verfügt, der in der Eingabe Document
angegeben wird, un der Tabelle existiert, dann ersetzt die PutItem
-Operation das gesamte vorhandene Element. Das neue Element ist identisch mit dem Document
-Objekt, das Sie der PutItem
-Methode zur Verfügung gestellt haben. Wenn das ursprüngliche Element zusätzliche Attribute hatte, sind diese im neuen Element nicht mehr vorhanden.
Es folgen die Schritte zum Setzen eines neuen Elements in die Tabelle mithilfe des AWS SDK for .NET-Dokumentmodells.
-
Führen Sie die
Table.LoadTable
-Methode aus, die den Tabellennamen bereitstellt, in den Sie ein Element ablegen möchten. -
Erstellen Sie ein
Document
-Objekt, das über eine Liste von Attributen und deren Werte verfügt. -
Führen Sie
Table.PutItem
aus, indem Sie dieDocument
-Instance als Parameter bereitstellen.
Im folgenden C#-Codebeispiel werden die vorherigen Aufgaben veranschaulicht. Das Beispiel lädt ein Element in die ProductCatalog
-Tabelle hoch.
Beispiel
Table table = Table.LoadTable(client, "ProductCatalog"); var book = new Document(); book["Id"] = 101; book["Title"] = "Book 101 Title"; book["ISBN"] = "11-11-11-11"; book["Authors"] = new List<string> { "Author 1", "Author 2" }; book["InStock"] = new DynamoDBBool(true); book["QuantityOnHand"] = new DynamoDBNull(); table.PutItem(book);
Im vorherigen Beispiel erstellt die Document
Instance ein Element mit den Null
Attributen Number
, String
, Boolean
, und String Set
. (Null
wird verwendet, um anzugeben, dass der QuantityOnHand für dieses Produkt unbekannt ist.) Verwenden Sie für Boolean
und Null
die Konstruktormethoden DynamoDBBool
und DynamoDBNull
.
In DynamoDB können die Datentypen List
und Map
aus anderen Datentypen bestehende Elemente enthalten. Hier sehen Sie, wie Sie diese Datentypen der Dokumentmodell-API zuordnen:.
-
List – nutzen Sie den
DynamoDBList
-Konstruktor. -
Map – nutzen Sie den
Document
-Konstruktor.
Sie können das vorherige Beispiel ändern, um dem Element ein List
-Attribut hinzuzufügen. Um dies zu tun, verwenden Sie einen DynamoDBList
-Konstruktor, wie im folgenden Codebeispiel gezeigt:
Beispiel
Table table = Table.LoadTable(client, "ProductCatalog"); var book = new Document(); book["Id"] = 101; /*other attributes omitted for brevity...*/ var relatedItems = new DynamoDBList(); relatedItems.Add(341); relatedItems.Add(472); relatedItems.Add(649); book.Add("RelatedItems", relatedItems); table.PutItem(book);
Um dem Buch ein Map
-Attribut hinzuzufügen, definieren Sie einen anderen Document
. Der folgende Beispielcode veranschaulicht diese Vorgehensweise.
Beispiel
Table table = Table.LoadTable(client, "ProductCatalog"); var book = new Document(); book["Id"] = 101; /*other attributes omitted for brevity...*/ var pictures = new Document(); pictures.Add("FrontView", "http://example.com/products/101_front.jpg" ); pictures.Add("RearView", "http://example.com/products/101_rear.jpg" ); book.Add("Pictures", pictures); table.PutItem(book);
Diese Beispiele basieren auf dem Element, das in Angeben von Elementattributen bei der Verwendung von Ausdrücken dargestellt wird. Das Dokumentmodell ermöglicht Ihnen das Erstellen von komplexen verschachtelten Attributen, wie das in dieser Fallstudie dargestellte ProductReviews
-Attribut.
Angeben eines optionalen Parameters
Sie können optionale Parameter für die PutItem
-Operation konfigurieren, indem Sie den Parameter PutItemOperationConfig
hinzufügen. Eine vollständige Liste der optionalen Parameter finden Sie unter PutItem. Das folgende C#-Codebeispiel setzt ein Element in die Tabelle ProductCatalog
. Folgende optionale Parameter werden angegeben:
-
Der Parameter
ConditionalExpression
, um dies zu einer bedingten Ablegeanforderung zu machen. Das Beispiel erstellt einen Ausdruck, der festlegt, dass dasISBN
-Attribut über einen bestimmten Wert verfügen muss, der in dem zu ersetzenden Element vorhanden ist.
Beispiel
Table table = Table.LoadTable(client, "ProductCatalog"); var book = new Document(); book["Id"] = 555; book["Title"] = "Book 555 Title"; book["Price"] = "25.00"; book["ISBN"] = "55-55-55-55"; book["Name"] = "Item 1 updated"; book["Authors"] = new List<string> { "Author x", "Author y" }; book["InStock"] = new DynamoDBBool(true); book["QuantityOnHand"] = new DynamoDBNull(); // Create a condition expression for the optional conditional put operation. Expression expr = new Expression(); expr.ExpressionStatement = "ISBN = :val"; expr.ExpressionAttributeValues[":val"] = "55-55-55-55"; PutItemOperationConfig config = new PutItemOperationConfig() { // Optional parameter. ConditionalExpression = expr }; table.PutItem(book, config);
Abrufen eines Elements – Tabelle.GetItem
Die GetItem
-Operation ruft ein Element als Document
-Instance ab. Sie müssen, wie im folgenden C#-Codebeispiel, den Primärschlüssel des wiederherzustellenden Elements angeben:
Beispiel
Table table = Table.LoadTable(client, "ProductCatalog"); Document document = table.GetItem(101); // Primary key 101.
Die GetItem
-Operation gibt alle Attribute des Elements zurück und führt standardmäßig einen Eventually Consistent-Lesevorgang durch (siehe Lesekonsistenz).
Angeben eines optionalen Parameters
Sie können zusätzliche Optionen für die GetItem
-Operation konfigurieren, indem Sie den Parameter GetItemOperationConfig
hinzufügen. Eine vollständige Liste der optionalen Parameter finden Sie unter GetItem. Das folgende C#-Codebeispiel ruft ein Objekt aus der ProductCatalog
-Tabelle ab. Die GetItemOperationConfig
wird angegeben, um die folgenden optionalen Parameter bereitzustellen:
-
Der Parameter
AttributesToGet
, um nur die angegebenen Attribute abzurufen. -
Der Parameter
ConsistentRead
, um die neuesten Werte für alle angegebenen Attribute anzufordern. Weitere Informationen zur Datenkonsistenz finden Sie unter Lesekonsistenz.
Beispiel
Table table = Table.LoadTable(client, "ProductCatalog"); GetItemOperationConfig config = new GetItemOperationConfig() { AttributesToGet = new List<string>() { "Id", "Title", "Authors", "InStock", "QuantityOnHand" }, ConsistentRead = true }; Document doc = table.GetItem(101, config);
Wenn Sie ein Element mithilfe der Dokumentmodell-API abrufen, haben Sie Zugriff auf individuelle Elemente im Document
-Objekt, wie im folgenden Beispiel gezeigt.
Beispiel
int id = doc["Id"].AsInt(); string title = doc["Title"].AsString(); List<string> authors = doc["Authors"].AsListOfString(); bool inStock = doc["InStock"].AsBoolean(); DynamoDBNull quantityOnHand = doc["QuantityOnHand"].AsDynamoDBNull();
Für Attribute des Typs List
oder Map
ordnen Sie diese Attribute so der Dokumentmodell-API zu:
-
List
–AsDynamoDBList
-Methode verwenden. -
Map
–AsDocument
-Methode verwenden.
Das folgende Codebeispiel zeigt, wie ein List
(RelatedItems) und ein Map
(Bilder) aus dem Document
Objekt abgerufen werden:
Beispiel
DynamoDBList relatedItems = doc["RelatedItems"].AsDynamoDBList(); Document pictures = doc["Pictures"].AsDocument();
Löschen eines Elements – Tabelle.DeleteItem
Die DeleteItem
-Operation löscht ein Element aus einer Tabelle. Sie können den Primärschlüssel des Elements als Parameter übergeben. Oder wenn Sie bereits ein Element gelesen haben und über das entsprechende Document
-Objekt verfügeb, können Sie dieses als Parameter an die DeleteItem
-Methode übergeben, wie im folgenden C#-Beispiel gezeigt.
Beispiel
Table table = Table.LoadTable(client, "ProductCatalog"); // Retrieve a book (a Document instance) Document document = table.GetItem(111); // 1) Delete using the Document instance. table.DeleteItem(document); // 2) Delete using the primary key. int partitionKey = 222; table.DeleteItem(partitionKey)
Angeben eines optionalen Parameters
Sie können zusätzliche Optionen für die Delete
-Operation konfigurieren, indem Sie den Parameter DeleteItemOperationConfig
hinzufügen. Eine vollständige Liste der optionalen Parameter finden Sie unter DeleteTable. Das folgende C#-Codebeispiel gibt die beiden folgenden optionalen Parameter an:
-
Den Parameter
ConditionalExpression
, um sicherzustellen, dass der Buchartikel, der gerade gelöscht wird, einen bestimmten Wert für das ISBN-Attribut hat. -
Den Parameter
ReturnValues
, um anzufordern, dass dieDelete
-Methode das Element zurückgibt, das sie gelöscht hat.
Beispiel
Table table = Table.LoadTable(client, "ProductCatalog"); int partitionKey = 111; Expression expr = new Expression(); expr.ExpressionStatement = "ISBN = :val"; expr.ExpressionAttributeValues[":val"] = "11-11-11-11"; // Specify optional parameters for Delete operation. DeleteItemOperationConfig config = new DeleteItemOperationConfig { ConditionalExpression = expr, ReturnValues = ReturnValues.AllOldAttributes // This is the only supported value when using the document model. }; // Delete the book. Document d = table.DeleteItem(partitionKey, config);
Aktualisieren eines Elements – Tabelle.UpdateItem
Die Operation UpdateItem
aktualisiert ein bestehendes Element, wenn es vorhanden ist. Wenn das Element, das den bestimmten Primärschlüssel besitzt, nicht gefunden wird, fügt die UpdateItem
-Operation ein neues Element hinzu.
Sie können die UpdateItem
-Operation verwenden, um vorhandene Attributwerte zu aktualisieren, neue Attribute der vorhandenen Sammlung hinzuzufügen oder Attribute aus der vorhandenen Sammlung zu löschen. Sie stellen diese Aktualisierungen bereit, indem Sie eine Document
-Instance erstellen, die die Aktualisierungen beschreibt, die Sie ausführen möchten.
Die UpdateItem
-Aktion verwendet die folgenden Leitlinien:
-
Wenn das Element nicht vorhanden ist, fügt
UpdateItem
ein neues Element hinzu, indem der in der Eingabe angegebene Primärschlüssel genutzt wird. -
Wenn das Element vorhanden ist, wendet
UpdateItem
die Aktualisierung wie folgt an:-
Ersetzt die vorhandenen Attributwerte mit den Werten in der Aktualisierung.
-
Wenn ein Attribut, das Sie in der Eingabe angegeben haben, nicht vorhanden ist, fügt es dem Element ein neues Attribut hinzu.
-
Wenn der Attributwert Null ist, löscht es die Attribute, sofern es vorhanden ist.
-
Anmerkung
Diese UpdateItem
Operation der mittleren Ebene unterstützt nicht die Add
Aktion (siehe UpdateItem), die von der zugrunde liegenden DynamoDB-Operation unterstützt wird.
Anmerkung
Die PutItem
-Operation (Einfügen eines Elements – Table.PutItem method) kann auch eine Aktualisierung durchführen. Wenn Sie PutItem
aufrufen, um ein Element hochzuladen, und der Primärschlüssel vorhanden ist, ersetzt die PutItem
-Operation das gesamte Element. Wenn Attribute in dem vorhandenen Element zur Verfügung stehen und diese nicht im Document
angegeben werden, das gerade abgelegt wird, löscht die PutItem
-Operation diese Attribute. Jedoch aktualisiert UpdateItem
lediglich die angegebenen Eingabeattribute. Alle anderen vorhandenen Attribute dieses Elements bleiben unverändert.
Im Folgenden werden die Schritte zum Aktualisieren eines Elements mithilfe des AWS SDK for .NET-Dokumentmodells erörtert.
-
Führen Sie die
Table.LoadTable
-Methode durch das Bereitstellen des Namens der Tabelle aus, in der Sie eine Aktualisierungsoperation durchführen möchten. -
Erstellen Sie eine
Document
-Instance, indem Sie alle Aktualisierungen bereitstellen, die Sie durchführen möchten.Um ein vorhandenes Attribut zu löschen, geben Sie den Attributwert als Null an.
-
Rufen Sie die
Table.UpdateItem
-Methode auf und geben dieDocument
-Instance als Eingabeparameter an.Sie müssen den Primärschlüssel entweder in der
Document
-Instance oder ausdrücklich als Parameter angeben.
Im folgenden C#-Codebeispiel werden die vorherigen Aufgaben veranschaulicht. Das Codebeispiel aktualisiert ein Element in der Book
-Tabelle. Die UpdateItem
-Operation aktualisiert das vorhandene Authors
-Attribut, löscht das PageCount
-Attribut und fügt ein neues XYZ
-Attribut hinzu. Die Document
-Instance beinhaltet den Primärschlüssel des zu aktualisierenden Buchs.
Beispiel
Table table = Table.LoadTable(client, "ProductCatalog"); var book = new Document(); // Set the attributes that you wish to update. book["Id"] = 111; // Primary key. // Replace the authors attribute. book["Authors"] = new List<string> { "Author x", "Author y" }; // Add a new attribute. book["XYZ"] = 12345; // Delete the existing PageCount attribute. book["PageCount"] = null; table.Update(book);
Angeben eines optionalen Parameters
Sie können zusätzliche Optionen für die UpdateItem
-Operation konfigurieren, indem Sie den Parameter UpdateItemOperationConfig
hinzufügen. Eine vollständige Liste der optionalen Parameter finden Sie unter UpdateItem.
Das folgende C#-Codebeispiel aktualisiert einen Buchartikelpreis auf 25. Es gibt die folgenden zwei optionalen Parameter an:
-
Den Parameter
ConditionalExpression
, der dasPrice
-Attribut mit dem Wert20
angibt, von dem Sie erwarten, dass er vorhanden ist. -
Den Parameter
ReturnValues
für die Anforderung derUpdateItem
-Methode, um das Element zurückzugeben, das aktualisiert wird.
Beispiel
Table table = Table.LoadTable(client, "ProductCatalog"); string partitionKey = "111"; var book = new Document(); book["Id"] = partitionKey; book["Price"] = 25; Expression expr = new Expression(); expr.ExpressionStatement = "Price = :val"; expr.ExpressionAttributeValues[":val"] = "20"; UpdateItemOperationConfig config = new UpdateItemOperationConfig() { ConditionalExpression = expr, ReturnValues = ReturnValues.AllOldAttributes }; Document d1 = table.Update(book, config);
Batch Write – Einfügen und Löschen mehrerer Elemente
Batch Write bezieht sich auf das Einfügen und Löschen mehrerer Elemente in einem Batch. Die Operation ermöglicht Ihnen, anhand eine einzigen Aufrufs, das Ablegen und Löschen von mehreren Elementen einer oder mehrerer Tabellen. Führen Sie Folgendes aus, um mehrere Elemente einer Tabelle mithilfe der AWS SDK for .NET-Dokumentmodell-API abzulegen oder zu löschen.
-
Durch das Ausführen der
Table
-Methode, wird einTable.LoadTable
-Objekt erstellt, indem Sie den Namen der Tabelle, in der Sie die Batchoperation durchführen möchten, angeben. -
Führen Sie die
createBatchWrite
-Methode auf der Tabellen-Instance, die Sie im vorangegangenen Schritt erstellt haben, aus und erstellen Sie dasDocumentBatchWrite
-Objekt. -
Verwenden Sie
DocumentBatchWrite
-Objektmethoden für das Angeben von Dokumenten, die Sie hochladen oder löschen möchten. -
Rufen Sie die
DocumentBatchWrite.Execute
-Methode auf, um die Batchoperation auszuführen.Wenn Sie die Dokumentmodell-API nutzen, können Sie eine beliebige Anzahl von Operationen in einem Batch angeben. Beachten Sie jedoch, dass DynamoDB die Anzahl der Operationen in einem Batch und die Gesamtgröße des Batches in einer Batchoperation begrenzt. Weitere Informationen zu den spezifischen Grenzwerten finden Sie unter BatchWriteItem. Wenn die Dokumentmodell-API erkennt, dass die Batchschreibanforderung die Menge der erlaubten Schreibanforderungen überschritten hat oder die HTTP-Nutzlastgröße eines Batches über dem Grenzwert von
BatchWriteItem
liegt, zerteilt sie den Batch in mehrere kleinere Batches. Wenn zudem eine Antwort auf einen BatchWrite-Vorgang unverarbeitete Elemente zurückgibt, sendet die Dokumentmodell-API automatisch eine andere Batchanforderung mit diesen unverarbeiteten Elementen.
Im folgenden C#-Codebeispiel werden die vorherigen Schritte veranschaulicht. Das Beispiel verwendet Batchschreiboperationen zum Durchführen von zwei Schreibvorgängen: Hochladen eines Buchartikels und Löschen eines anderen.
Table productCatalog = Table.LoadTable(client, "ProductCatalog"); var batchWrite = productCatalog.CreateBatchWrite(); var book1 = new Document(); book1["Id"] = 902; book1["Title"] = "My book1 in batch write using .NET document model"; book1["Price"] = 10; book1["Authors"] = new List<string> { "Author 1", "Author 2", "Author 3" }; book1["InStock"] = new DynamoDBBool(true); book1["QuantityOnHand"] = 5; batchWrite.AddDocumentToPut(book1); // specify delete item using overload that takes PK. batchWrite.AddKeyToDelete(12345); batchWrite.Execute();
Ein funktionierendes Beispiel finden Sie unter Beispiel: Batchoperationen mit der AWS SDK for .NET-Dokumentmodell-API.
Sie können die batchWrite
-Operation zum Durchführen von Ablege- und Löschoperationen auf mehreren Tabellen durchführen. Führen Sie Folgendes aus, um mehrere Elemente aus mehreren Tabellen mithilfe des AWS SDK for .NET-Dokumentmodells abzulegen oder zu löschen.
-
Sie erstellen eine
DocumentBatchWrite
-Instance für jede Tabelle, in der Sie mehrere Elemente, wie im vorherigen Vorgang beschrieben, ablegen oder löschen möchten. -
Erstellen Sie eine Instance des
MultiTableDocumentBatchWrite
und fügen dieser das individuelleDocumentBatchWrite
-Objekt hinzu. -
Führen Sie die
MultiTableDocumentBatchWrite.Execute
-Methode aus.
Im folgenden C#-Codebeispiel werden die vorherigen Schritte veranschaulicht. Das Beispiel verwendet Batchschreiboperationen für die Durchführung der folgenden Schreiboperationen:
-
Legen Sie ein neues Element in das
Forum
-Tabellenelement ab -
Legen Sie ein Element in die
Thread
-Tabelle ab, und löschen Sie ein Element aus derselben Tabelle.
// 1. Specify item to add in the Forum table. Table forum = Table.LoadTable(client, "Forum"); var forumBatchWrite = forum.CreateBatchWrite(); var forum1 = new Document(); forum1["Name"] = "Test BatchWrite Forum"; forum1["Threads"] = 0; forumBatchWrite.AddDocumentToPut(forum1); // 2a. Specify item to add in the Thread table. Table thread = Table.LoadTable(client, "Thread"); var threadBatchWrite = thread.CreateBatchWrite(); var thread1 = new Document(); thread1["ForumName"] = "Amazon S3 forum"; thread1["Subject"] = "My sample question"; thread1["Message"] = "Message text"; thread1["KeywordTags"] = new List<string>{ "Amazon S3", "Bucket" }; threadBatchWrite.AddDocumentToPut(thread1); // 2b. Specify item to delete from the Thread table. threadBatchWrite.AddKeyToDelete("someForumName", "someSubject"); // 3. Create multi-table batch. var superBatch = new MultiTableDocumentBatchWrite(); superBatch.AddBatch(forumBatchWrite); superBatch.AddBatch(threadBatchWrite); superBatch.Execute();