Travailler avec des objets :. NET - Amazon DynamoDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Travailler avec des objets :. NET

Vous pouvez utiliser le AWS SDK for .NET bas niveau API pour effectuer des opérations classiques de création, de lecture, de mise à jour et de suppression (CRUD) sur un élément d'une table. Voici les étapes courantes que vous devez suivre pour effectuer des CRUD opérations sur les données à l'aide du. NETbas niveau API :

  1. Créez une instance de la classe AmazonDynamoDBClient (le client).

  2. Fournissez les paramètres obligatoires spécifiques de l'opération dans un objet de demande correspondant.

    Par exemple, utilisez l'objet de demande PutItemRequest lors du chargement d'un élément, et l'objet de demande GetItemRequest lors de l'extraction d'un élément existant.

    Vous pouvez utiliser l'objet de demande pour fournir les paramètres obligatoires et facultatifs.

  3. Exécutez la méthode appropriée fournie par le client en passant l'objet de demande que vous avez créé à l'étape précédente.

    Le AmazonDynamoDBClient client fournitPutItem, GetItemUpdateItem, et les DeleteItem méthodes pour les CRUD opérations.

Placement d'un élément

La méthode PutItem charge un élément dans une table. Si l'élément existe, il remplace la totalité de l'élément.

Note

Au lieu de remplacer l'élément entier, si vous souhaitez mettre à jour uniquement des attributs spécifiques, vous pouvez utiliser la méthode UpdateItem. Pour de plus amples informations, veuillez consulter Mise à jour d'un élément.

Voici les étapes à suivre pour télécharger un article à l'aide du bas niveau. NETSDKAPI:

  1. Créez une instance de la classe AmazonDynamoDBClient.

  2. Fournissez les paramètres obligatoires en créant une instance de la classe PutItemRequest.

    Pour insérer un élément, vous devez fournir le nom de la table et l'élément.

  3. Appelez la méthode PutItem en fournissant les objets PutItemRequest que vous avez créés à l'étape précédente.

L'exemple de code C# suivant illustre les étapes précédentes. L'exemple charge un élément dans la table ProductCatalog.

Exemple
AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "ProductCatalog"; var request = new PutItemRequest { TableName = tableName, Item = new Dictionary<string, AttributeValue>() { { "Id", new AttributeValue { N = "201" }}, { "Title", new AttributeValue { S = "Book 201 Title" }}, { "ISBN", new AttributeValue { S = "11-11-11-11" }}, { "Price", new AttributeValue { S = "20.00" }}, { "Authors", new AttributeValue { SS = new List<string>{"Author1", "Author2"} } } } }; client.PutItem(request);

Dans l'exemple précédent, vous chargez un élément book (livre) qui possède les attributs Id, Title, ISBN et Authors. Notez que Id est un attribut de type numérique, et que tous les autres attributs sont de type String (chaîne). Authors est un ensemble String.

Spécification de paramètres facultatifs

Vous pouvez également fournir des paramètres facultatifs à l'aide de l'objet PutItemRequest, comme illustré dans l'exemple C# suivant. L'échantillon spécifie les paramètres facultatifs suivants :

  • ExpressionAttributeNamesExpressionAttributeValues, et ConditionExpression spécifiez que l'article ne peut être remplacé que si l'élément existant possède l'ISBNattribut avec une valeur spécifique.

  • Paramètre ReturnValues pour demander l'ancien élément dans la réponse.

Exemple
var request = new PutItemRequest { TableName = tableName, Item = new Dictionary<string, AttributeValue>() { { "Id", new AttributeValue { N = "104" }}, { "Title", new AttributeValue { S = "Book 104 Title" }}, { "ISBN", new AttributeValue { S = "444-4444444444" }}, { "Authors", new AttributeValue { SS = new List<string>{"Author3"}}} }, // Optional parameters. ExpressionAttributeNames = new Dictionary<string,string>() { {"#I", "ISBN"} }, ExpressionAttributeValues = new Dictionary<string, AttributeValue>() { {":isbn",new AttributeValue {S = "444-4444444444"}} }, ConditionExpression = "#I = :isbn" }; var response = client.PutItem(request);

Pour plus d'informations, consultez PutItem.

Obtention d'un élément

La méthode GetItem extrait un élément.

Note

Pour extraire plusieurs éléments, vous pouvez utiliser la méthode BatchGetItem. Pour de plus amples informations, veuillez consulter Obtention par lots : obtention de plusieurs éléments.

Voici les étapes à suivre pour récupérer un élément existant à l'aide du niveau inférieur AWS SDK for .NET API.

  1. Créez une instance de la classe AmazonDynamoDBClient.

  2. Fournissez les paramètres obligatoires en créant une instance de la classe GetItemRequest.

    Pour obtenir un élément, vous devez fournir le nom de la table et la clé primaire de l'élément.

  3. Appelez la méthode GetItem en fournissant les objets GetItemRequest que vous avez créés à l'étape précédente.

L'exemple de code C# suivant illustre les étapes précédentes. L'exemple extrait un élément de la table ProductCatalog.

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "ProductCatalog"; var request = new GetItemRequest { TableName = tableName, Key = new Dictionary<string,AttributeValue>() { { "Id", new AttributeValue { N = "202" } } }, }; var response = client.GetItem(request); // Check the response. var result = response.GetItemResult; var attributeMap = result.Item; // Attribute list in the response.

Spécification de paramètres facultatifs

Vous pouvez également fournir des paramètres facultatifs à l'aide de l'objet GetItemRequest, comme illustré dans l'exemple C# suivant. L'exemple spécifie les paramètres facultatifs suivants :

  • Paramètre ProjectionExpression pour spécifier les attributs à extraire.

  • Paramètre ConsistentRead pour effectuer une lecture fortement cohérente. Pour en savoir plus sur la cohérence de lecture, consultez Cohérence de lecture DynamoDB.

Exemple
AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "ProductCatalog"; var request = new GetItemRequest { TableName = tableName, Key = new Dictionary<string,AttributeValue>() { { "Id", new AttributeValue { N = "202" } } }, // Optional parameters. ProjectionExpression = "Id, ISBN, Title, Authors", ConsistentRead = true }; var response = client.GetItem(request); // Check the response. var result = response.GetItemResult; var attributeMap = result.Item;

Pour plus d'informations, consultez GetItem.

Mise à jour d'un élément

La méthode UpdateItem met à jour un élément existant s'il est présent. Vous pouvez utiliser l'opération UpdateItem pour mettre à jour des valeurs d'attribut existantes, ajouter des attributs ou supprimer des attributs dans la collection existante. Si l'élément qui possède la clé primaire spécifiée est introuvable, l'opération ajoute un nouvel élément.

L'opération UpdateItem suit les directives suivantes :

  • Si l'élément n'existe pas, UpdateItem ajoute un nouvel élément à l'aide de la clé primaire spécifiée dans l'entrée.

  • Si l'élément existe, UpdateItem applique les mises à jour comme suit :

    • Remplace les valeurs d'attribut existantes par les valeurs figurant dans la mise à jour.

    • Si un attribut que vous fournissez en entrée n'existe pas, l'opération ajoute un nouvel attribut à l'élément.

    • Si l'attribut en entrée a la valeur null, elle supprime l'attribut s'il est présent.

    • Si vous utilisez ADD pour Action, vous pouvez ajouter des valeurs à un ensemble existant (ensemble de chaînes ou de nombres), ou bien ajouter (utiliser un nombre positif) ou soustraire (utiliser un nombre négatif) mathématiquement de façon à augmenter ou réduire la valeur de l'attribut numérique existant.

Note

L'opération PutItem peut également effectuer une mise à jour. Pour de plus amples informations, veuillez consulter Placement d'un élément. Par exemple, si vous appelez PutItem pour charger un élément et que la clé primaire existe, l'opération PutItem remplace l'élément entier. Si l'élément existant contient des attributs qui ne sont pas spécifiés dans l'entrée, l'opération PutItem supprime ces attributs. Toutefois, l'opération UpdateItem ne met à jour que les attributs d'entrée spécifiés. Tous les autres attributs de cet élément demeurent inchangés.

Voici les étapes à suivre pour mettre à jour un élément existant à l'aide du niveau inférieur. NETSDKAPI:

  1. Créez une instance de la classe AmazonDynamoDBClient.

  2. Fournissez les paramètres obligatoires en créant une instance de la classe UpdateItemRequest.

    Il s'agit de l'objet de demande dans lequel vous décrivez toutes les mises à jour, telles que l'ajout d'attributs, la mise à jour d'attributs ou la suppression d'attributs. Pour supprimer un attribut, spécifiez son nom avec la valeur null.

  3. Appelez la méthode UpdateItem en fournissant les objets UpdateItemRequest que vous avez créés à l'étape précédente.

L'exemple de code C# suivant présente les étapes précédentes. L'exemple de code met à jour un élément book (livre) dans la table ProductCatalog. Il ajoute un nouvel auteur à la collection Authors et supprime l'attribut ISBN existant. Il permet également de réduire le prix d'un niveau.

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "ProductCatalog"; var request = new UpdateItemRequest { TableName = tableName, Key = new Dictionary<string,AttributeValue>() { { "Id", new AttributeValue { N = "202" } } }, ExpressionAttributeNames = new Dictionary<string,string>() { {"#A", "Authors"}, {"#P", "Price"}, {"#NA", "NewAttribute"}, {"#I", "ISBN"} }, ExpressionAttributeValues = new Dictionary<string, AttributeValue>() { {":auth",new AttributeValue { SS = {"Author YY","Author ZZ"}}}, {":p",new AttributeValue {N = "1"}}, {":newattr",new AttributeValue {S = "someValue"}}, }, // This expression does the following: // 1) Adds two new authors to the list // 2) Reduces the price // 3) Adds a new attribute to the item // 4) Removes the ISBN attribute from the item UpdateExpression = "ADD #A :auth SET #P = #P - :p, #NA = :newattr REMOVE #I" }; var response = client.UpdateItem(request);

Spécification de paramètres facultatifs

Vous pouvez également fournir des paramètres facultatifs à l'aide de l'objet UpdateItemRequest, comme illustré dans l'exemple C# suivant. Il spécifie les deux paramètres facultatifs suivants :

  • ExpressionAttributeValues et ConditionExpression pour spécifier que le prix peut être mis à jour uniquement s'il est de 20,00.

  • Paramètre ReturnValues pour demander l'élément mis à jour dans la réponse.

Exemple
AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "ProductCatalog"; var request = new UpdateItemRequest { Key = new Dictionary<string,AttributeValue>() { { "Id", new AttributeValue { N = "202" } } }, // Update price only if the current price is 20.00. ExpressionAttributeNames = new Dictionary<string,string>() { {"#P", "Price"} }, ExpressionAttributeValues = new Dictionary<string, AttributeValue>() { {":newprice",new AttributeValue {N = "22"}}, {":currprice",new AttributeValue {N = "20"}} }, UpdateExpression = "SET #P = :newprice", ConditionExpression = "#P = :currprice", TableName = tableName, ReturnValues = "ALL_NEW" // Return all the attributes of the updated item. }; var response = client.UpdateItem(request);

Pour plus d'informations, consultez UpdateItem.

Compteurs atomiques

Vous pouvez utiliser updateItem pour implémenter un compteur atomique, où vous incrémentez ou décrémentez la valeur d'un attribut existant sans interférer avec d'autres demandes d'écriture. Pour mettre à jour un compteur atomique, utilisez updateItem avec un attribut de type Number dans le paramètre UpdateExpression, et ADD pour Action.

L'extrait de code suivant illustre cette action, en incrémentant l'attribut Quantity d'une unité.

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "ProductCatalog"; var request = new UpdateItemRequest { Key = new Dictionary<string, AttributeValue>() { { "Id", new AttributeValue { N = "121" } } }, ExpressionAttributeNames = new Dictionary<string, string>() { {"#Q", "Quantity"} }, ExpressionAttributeValues = new Dictionary<string, AttributeValue>() { {":incr",new AttributeValue {N = "1"}} }, UpdateExpression = "SET #Q = #Q + :incr", TableName = tableName }; var response = client.UpdateItem(request);

Suppression d'un élément

La méthode DeleteItem supprime un élément d'une table.

Voici les étapes à suivre pour supprimer un élément à l'aide du niveau inférieur. NETSDKAPI.

  1. Créez une instance de la classe AmazonDynamoDBClient.

  2. Fournissez les paramètres obligatoires en créant une instance de la classe DeleteItemRequest.

    Pour supprimer un élément, le nom de la table et la clé primaire de l'élément sont requis.

  3. Appelez la méthode DeleteItem en fournissant les objets DeleteItemRequest que vous avez créés à l'étape précédente.

Exemple
AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "ProductCatalog"; var request = new DeleteItemRequest { TableName = tableName, Key = new Dictionary<string,AttributeValue>() { { "Id", new AttributeValue { N = "201" } } }, }; var response = client.DeleteItem(request);

Spécification de paramètres facultatifs

Vous pouvez également fournir des paramètres facultatifs à l'aide de l'objet DeleteItemRequest, comme illustré dans l'exemple de code C# suivant. Il spécifie les deux paramètres facultatifs suivants :

  • ExpressionAttributeValueset ConditionExpression pour spécifier que l'élément du livre ne peut être supprimé que s'il n'est plus en cours de publication (la valeur de InPublication l'attribut est fausse).

  • Paramètre ReturnValues pour demander l'élément supprimé dans la réponse.

Exemple
var request = new DeleteItemRequest { TableName = tableName, Key = new Dictionary<string,AttributeValue>() { { "Id", new AttributeValue { N = "201" } } }, // Optional parameters. ReturnValues = "ALL_OLD", ExpressionAttributeNames = new Dictionary<string, string>() { {"#IP", "InPublication"} }, ExpressionAttributeValues = new Dictionary<string, AttributeValue>() { {":inpub",new AttributeValue {BOOL = false}} }, ConditionExpression = "#IP = :inpub" }; var response = client.DeleteItem(request);

Pour plus d'informations, consultez DeleteItem.

Écriture par lots : insertion et suppression de plusieurs éléments

L'écriture par lots fait référence à l'insertion et la suppression de plusieurs éléments dans un lot. La méthode BatchWriteItem vous permet d'insérer et de supprimer plusieurs éléments d'une ou de plusieurs tables en un seul appel. Voici les étapes à suivre pour récupérer plusieurs éléments à l'aide du bas niveau. NETSDKAPI.

  1. Créez une instance de la classe AmazonDynamoDBClient.

  2. Décrivez toutes les opérations d'insertion et de suppression en créant une instance de la classe BatchWriteItemRequest.

  3. Appelez la méthode BatchWriteItem en fournissant les objets BatchWriteItemRequest que vous avez créés à l'étape précédente.

  4. Traitez la réponse. Vous devez vérifier si des éléments de requêtes non traités ont été renvoyés dans la réponse. Cela peut se produire si vous atteignez le quota de débit alloué ou une autre erreur temporaire. En outre, DynamoDB limite la taille de demande et le nombre d'opérations que vous pouvez spécifier dans une demande. Si vous dépassez ces limites, DynamoDB rejette la demande. Pour plus d'informations, consultez BatchWriteItem.

L'exemple de code C# suivant présente les étapes précédentes. L'exemple crée une BatchWriteItemRequest pour effectuer les opérations d'écriture suivantes :

  • Insérer un élément dans la table Forum.

  • Insérer et supprimer un élément dans la table Thread.

Le code exécute BatchWriteItem pour effectuer une opération par lot.

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string table1Name = "Forum"; string table2Name = "Thread"; var request = new BatchWriteItemRequest { RequestItems = new Dictionary<string, List<WriteRequest>> { { table1Name, new List<WriteRequest> { new WriteRequest { PutRequest = new PutRequest { Item = new Dictionary<string,AttributeValue> { { "Name", new AttributeValue { S = "Amazon S3 forum" } }, { "Threads", new AttributeValue { N = "0" }} } } } } } , { table2Name, new List<WriteRequest> { new WriteRequest { PutRequest = new PutRequest { Item = new Dictionary<string,AttributeValue> { { "ForumName", new AttributeValue { S = "Amazon S3 forum" } }, { "Subject", new AttributeValue { S = "My sample question" } }, { "Message", new AttributeValue { S = "Message Text." } }, { "KeywordTags", new AttributeValue { SS = new List<string> { "Amazon S3", "Bucket" } } } } } }, new WriteRequest { DeleteRequest = new DeleteRequest { Key = new Dictionary<string,AttributeValue>() { { "ForumName", new AttributeValue { S = "Some forum name" } }, { "Subject", new AttributeValue { S = "Some subject" } } } } } } } } }; response = client.BatchWriteItem(request);

Pour obtenir un exemple pratique, consultez Exemple : opérations par lots utilisant le AWS SDK for .NET bas niveau API.

Obtention par lots : obtention de plusieurs éléments

La méthode BatchGetItem vous permet de récupérer plusieurs éléments d'une ou de plusieurs tables.

Note

Pour récupérer un seul élément, vous pouvez utiliser la méthode GetItem.

Voici les étapes à suivre pour récupérer plusieurs éléments à l'aide du bas niveau AWS SDK for .NET API.

  1. Créez une instance de la classe AmazonDynamoDBClient.

  2. Fournissez les paramètres obligatoires en créant une instance de la classe BatchGetItemRequest.

    Pour extraire plusieurs éléments, le nom de la table et une liste de valeurs de clé primaire sont requis.

  3. Appelez la méthode BatchGetItem en fournissant les objets BatchGetItemRequest que vous avez créés à l'étape précédente.

  4. Traitez la réponse. Vous devez vérifier s'il existe des clés non traitées, ce qui peut se produire si vous atteignez le quota de débit alloué ou autre erreur temporaire.

L'exemple de code C# suivant présente les étapes précédentes. L'exemple extrait les éléments de deux tables, Forum et Thread. La demande spécifie deux éléments dans la table Forum et trois éléments dans la table Thread. La réponse inclut des éléments des deux tables. Le code montre comment vous pouvez traiter la réponse.

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string table1Name = "Forum"; string table2Name = "Thread"; var request = new BatchGetItemRequest { RequestItems = new Dictionary<string, KeysAndAttributes>() { { table1Name, new KeysAndAttributes { Keys = new List<Dictionary<string, AttributeValue>>() { new Dictionary<string, AttributeValue>() { { "Name", new AttributeValue { S = "DynamoDB" } } }, new Dictionary<string, AttributeValue>() { { "Name", new AttributeValue { S = "Amazon S3" } } } } } }, { table2Name, new KeysAndAttributes { Keys = new List<Dictionary<string, AttributeValue>>() { new Dictionary<string, AttributeValue>() { { "ForumName", new AttributeValue { S = "DynamoDB" } }, { "Subject", new AttributeValue { S = "DynamoDB Thread 1" } } }, new Dictionary<string, AttributeValue>() { { "ForumName", new AttributeValue { S = "DynamoDB" } }, { "Subject", new AttributeValue { S = "DynamoDB Thread 2" } } }, new Dictionary<string, AttributeValue>() { { "ForumName", new AttributeValue { S = "Amazon S3" } }, { "Subject", new AttributeValue { S = "Amazon S3 Thread 1" } } } } } } } }; var response = client.BatchGetItem(request); // Check the response. var result = response.BatchGetItemResult; var responses = result.Responses; // The attribute list in the response. var table1Results = responses[table1Name]; Console.WriteLine("Items in table {0}" + table1Name); foreach (var item1 in table1Results.Items) { PrintItem(item1); } var table2Results = responses[table2Name]; Console.WriteLine("Items in table {1}" + table2Name); foreach (var item2 in table2Results.Items) { PrintItem(item2); } // Any unprocessed keys? could happen if you exceed ProvisionedThroughput or some other error. Dictionary<string, KeysAndAttributes> unprocessedKeys = result.UnprocessedKeys; foreach (KeyValuePair<string, KeysAndAttributes> pair in unprocessedKeys) { Console.WriteLine(pair.Key, pair.Value); }

Spécification de paramètres facultatifs

Vous pouvez également fournir des paramètres facultatifs à l'aide de l'objet BatchGetItemRequest, comme illustré dans l'exemple de code C# suivant. L'exemple extrait deux éléments de la table Forum. Il spécifie le paramètre facultatif suivant :

  • Paramètre ProjectionExpression pour spécifier les attributs à extraire.

Exemple
AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string table1Name = "Forum"; var request = new BatchGetItemRequest { RequestItems = new Dictionary<string, KeysAndAttributes>() { { table1Name, new KeysAndAttributes { Keys = new List<Dictionary<string, AttributeValue>>() { new Dictionary<string, AttributeValue>() { { "Name", new AttributeValue { S = "DynamoDB" } } }, new Dictionary<string, AttributeValue>() { { "Name", new AttributeValue { S = "Amazon S3" } } } } }, // Optional - name of an attribute to retrieve. ProjectionExpression = "Title" } } }; var response = client.BatchGetItem(request);

Pour plus d'informations, consultez BatchGetItem.