DynamoDB - Recupero di elementi

Il recupero di un elemento in DynamoDB richiede l'utilizzo di GetItem e la specifica del nome della tabella e della chiave primaria dell'elemento. Assicurati di includere una chiave primaria completa piuttosto che omettere una parte.

Ad esempio, omettendo la chiave di ordinamento di una chiave composta.

Il comportamento di GetItem è conforme a tre impostazioni predefinite:

  • Viene eseguito come una lettura eventualmente coerente.
  • Fornisce tutti gli attributi.
  • Non dettaglia il consumo di unità di capacità.

Questi parametri consentono di sostituire il comportamento GetItem predefinito.

Recupera un oggetto

DynamoDB garantisce l'affidabilità mantenendo più copie di elementi su più server. Ogni scrittura riuscita crea queste copie, ma richiede molto tempo per essere eseguita; significato eventualmente coerente. Ciò significa che non è possibile tentare immediatamente una lettura dopo aver scritto un elemento.

È possibile modificare la lettura consistente predefinita di GetItem, tuttavia, il costo di più dati correnti rimane il consumo di più unità di capacità; in particolare, due volte tanto. Nota DynamoDB in genere raggiunge la coerenza su ogni copia entro un secondo.

È possibile utilizzare la console GUI, Java o un altro strumento per eseguire questa attività.

Recupero degli elementi tramite Java

L'utilizzo di Java nelle operazioni di recupero degli elementi richiede la creazione di un'istanza di classe DynamoDB, un'istanza di classe di tabella e la chiamata al metodo getItem dell'istanza di tabella. Quindi specificare la chiave primaria dell'elemento.

Puoi rivedere il seguente esempio:

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

In alcuni casi, è necessario specificare i parametri per questa operazione.

Il seguente esempio usa .withProjectionExpression e GetItemSpec per le specifiche di recupero -

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

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

Puoi anche rivedere il seguente esempio più grande per una migliore comprensione.

Note- Il seguente esempio può presupporre un'origine dati creata in precedenza. Prima di tentare l'esecuzione, acquisire le librerie di supporto e creare le origini dati necessarie (tabelle con caratteristiche richieste o altre fonti di riferimento).

Questo esempio utilizza anche Eclipse IDE, un file delle credenziali AWS e AWS Toolkit all'interno di un progetto 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());
      }
   }
}