DynamoDB - Obtention d'éléments

La récupération d'un élément dans DynamoDB nécessite l'utilisation de GetItem et la spécification du nom de la table et de la clé primaire de l'élément. Assurez-vous d'inclure une clé primaire complète plutôt que d'omettre une partie.

Par exemple, omettre la clé de tri d'une clé composite.

Le comportement de GetItem est conforme à trois valeurs par défaut -

  • Il s'exécute comme une lecture finalement cohérente.
  • Il fournit tous les attributs.
  • Il ne détaille pas sa consommation unitaire de capacité.

Ces paramètres vous permettent de remplacer le comportement par défaut de GetItem.

Récupérer un élément

DynamoDB garantit la fiabilité en conservant plusieurs copies des éléments sur plusieurs serveurs. Chaque écriture réussie crée ces copies, mais prend un temps considérable à exécuter; signifiant finalement cohérent. Cela signifie que vous ne pouvez pas tenter une lecture immédiatement après avoir écrit un élément.

Vous pouvez modifier la lecture cohérente par défaut de GetItem, cependant, le coût des données plus actuelles reste la consommation d'unités de capacité plus; plus précisément, deux fois plus. Remarque DynamoDB atteint généralement la cohérence entre chaque copie en une seconde.

Vous pouvez utiliser la console GUI, Java ou un autre outil pour effectuer cette tâche.

Récupération d'éléments à l'aide de Java

L'utilisation de Java dans les opérations de récupération d'éléments nécessite la création d'une instance de classe DynamoDB, une instance de classe de table et l'appel de la méthode getItem de l'instance de table. Spécifiez ensuite la clé primaire de l'élément.

Vous pouvez consulter l'exemple suivant -

DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient( 
   new ProfileCredentialsProvider()));  
Table table = dynamoDB.getTable("ProductList");  
Item item = table.getItem("IDnum", 109);

Dans certains cas, vous devez spécifier les paramètres de cette opération.

L'exemple suivant utilise .withProjectionExpression et GetItemSpec pour les spécifications de récupération -

GetItemSpec spec = new GetItemSpec() 
   .withPrimaryKey("IDnum", 122) 
   .withProjectionExpression("IDnum, EmployeeName, Department") 
   .withConsistentRead(true);

Item item = table.getItem(spec);
System.out.println(item.toJSONPretty());

Vous pouvez également consulter un exemple plus détaillé suivant pour une meilleure compréhension.

Note- L'exemple suivant peut supposer une source de données précédemment créée. Avant de tenter de l'exécuter, acquérez les bibliothèques de prise en charge et créez les sources de données nécessaires (tables avec les caractéristiques requises ou autres sources référencées).

Cet exemple utilise également Eclipse IDE, un fichier d'informations d'identification AWS et AWS Toolkit dans un projet Eclipse AWS Java.

package com.amazonaws.codesamples.document;

import java.io.IOException
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.DeleteItemOutcome;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.Table;

import com.amazonaws.services.dynamodbv2.document.UpdateItemOutcome;
import com.amazonaws.services.dynamodbv2.document.spec.DeleteItemSpec;
import com.amazonaws.services.dynamodbv2.document.spec.UpdateItemSpec;
import com.amazonaws.services.dynamodbv2.document.utils.NameMap;
import com.amazonaws.services.dynamodbv2.document.utils.ValueMap;
import com.amazonaws.services.dynamodbv2.model.ReturnValue;

public class GetItemOpSample {
   static DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient(
      new ProfileCredentialsProvider()));
   
   static String tblName = "ProductList";
   public static void main(String[] args) throws IOException {
      createItems();
      retrieveItem();
      
      // Execute updates
      updateMultipleAttributes();
      updateAddNewAttribute();
      updateExistingAttributeConditionally();
      
      // Item deletion
      deleteItem();
   }
   private static void createItems() {
      Table table = dynamoDB.getTable(tblName);
      try {
         Item item = new Item()
            .withPrimaryKey("ID", 303)
            .withString("Nomenclature", "Polymer Blaster 4000")
            .withStringSet( "Manufacturers",
            new HashSet<String>(Arrays.asList("XYZ Inc.", "LMNOP Inc.")))
            .withNumber("Price", 50000)
            .withBoolean("InProduction", true)
            .withString("Category", "Laser Cutter");
            table.putItem(item);
            
         item = new Item()
            .withPrimaryKey("ID", 313)
            .withString("Nomenclature", "Agitatatron 2000")
            .withStringSet( "Manufacturers",
            new HashSet<String>(Arrays.asList("XYZ Inc,", "CDE Inc.")))
            .withNumber("Price", 40000)
            .withBoolean("InProduction", true)
            .withString("Category", "Agitator");
         
         table.putItem(item);
      } catch (Exception e) {
         System.err.println("Cannot create items.");
         System.err.println(e.getMessage());
      }
   }
   private static void retrieveItem() {
      Table table = dynamoDB.getTable(tableName);
      try {
         Item item = table.getItem("ID", 303, "ID, Nomenclature, Manufacturers", null);
         System.out.println("Displaying retrieved items...");
         System.out.println(item.toJSONPretty());
      } catch (Exception e) {
         System.err.println("Cannot retrieve items.");
         System.err.println(e.getMessage());
      }
   }
}