DynamoDB - Nhận vật phẩm

Việc truy xuất một mục trong DynamoDB yêu cầu sử dụng GetItem và chỉ định tên bảng và khóa chính của mục. Đảm bảo bao gồm một khóa chính đầy đủ thay vì bỏ qua một phần.

Ví dụ: bỏ qua khóa sắp xếp của khóa tổng hợp.

Hành vi GetItem tuân theo ba giá trị mặc định -

  • Nó thực hiện như một lần đọc nhất quán cuối cùng.
  • Nó cung cấp tất cả các thuộc tính.
  • Nó không nêu chi tiết mức tiêu thụ đơn vị công suất của nó.

Các tham số này cho phép bạn ghi đè hành vi GetItem mặc định.

Lấy một mục

DynamoDB đảm bảo độ tin cậy thông qua việc duy trì nhiều bản sao của các mục trên nhiều máy chủ. Mỗi lần ghi thành công sẽ tạo ra các bản sao này, nhưng cần thời gian đáng kể để thực thi; nghĩa là cuối cùng nhất quán. Điều này có nghĩa là bạn không thể đọc ngay sau khi viết một mục.

Bạn có thể thay đổi cách đọc mặc định cuối cùng nhất quán của GetItem, tuy nhiên, chi phí của nhiều dữ liệu hiện tại hơn vẫn tiêu thụ nhiều đơn vị dung lượng hơn; cụ thể là gấp hai lần. Lưu ý DynamoDB thường đạt được tính nhất quán trên mọi bản sao trong vòng một giây.

Bạn có thể sử dụng bảng điều khiển GUI, Java hoặc một công cụ khác để thực hiện tác vụ này.

Truy xuất mục bằng Java

Sử dụng Java trong các hoạt động truy xuất mục yêu cầu tạo một Phiên bản lớp DynamoDB, Phiên bản lớp Bảng và gọi phương thức getItem của cá thể Bảng. Sau đó chỉ định khóa chính của mặt hàng.

Bạn có thể xem lại ví dụ sau:

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

Trong một số trường hợp, bạn cần chỉ định các tham số cho thao tác này.

Ví dụ sau sử dụng .withProjectionExpressionGetItemSpec để biết thông số kỹ thuật truy xuất -

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

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

Bạn cũng có thể xem lại một ví dụ lớn hơn sau đây để hiểu rõ hơn.

Note- Mẫu sau có thể giả sử là nguồn dữ liệu đã tạo trước đó. Trước khi cố gắng thực thi, hãy thu thập các thư viện hỗ trợ và tạo các nguồn dữ liệu cần thiết (các bảng có các đặc điểm bắt buộc hoặc các nguồn tham chiếu khác).

Mẫu này cũng sử dụng Eclipse IDE, tệp thông tin đăng nhập AWS và Bộ công cụ AWS trong Dự án Java AWS của Eclipse.

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());
      }
   }
}