DynamoDB-일괄 검색
일괄 검색 작업은 단일 또는 여러 항목의 속성을 반환합니다. 이러한 작업은 일반적으로 원하는 항목을 식별하기 위해 기본 키를 사용하는 것으로 구성됩니다. 그만큼BatchGetItem 작업에는 개별 작업의 한계와 고유 한 제약이 적용됩니다.
일괄 검색 작업에서 다음 요청은 거부 결과-
- 100 개 이상의 항목을 요청하십시오.
- 처리량을 초과하는 요청을합니다.
일괄 검색 작업은 제한을 초과 할 가능성이있는 요청을 부분적으로 처리합니다.
For example− 제한을 초과 할만큼 크기가 충분히 큰 여러 항목을 검색하라는 요청은 요청 처리의 일부가되고 처리되지 않은 부분을 알려주는 오류 메시지가 발생합니다. 처리되지 않은 항목이 반환되면 테이블을 제한하는 대신이를 관리하는 백 오프 알고리즘 솔루션을 만듭니다.
그만큼 BatchGet작업은 결국 일관된 읽기로 수행되므로 강력한 일관된 읽기를 수정해야합니다. 또한 검색을 병렬로 수행합니다.
Note− 반품 된 품목의 주문. DynamoDB는 항목을 정렬하지 않습니다. 또한 요청 된 항목이 없음을 나타내지 않습니다. 또한 이러한 요청은 용량 단위를 사용합니다.
모든 BatchGet 작업에 필요한 RequestItems 읽기 일관성, 속성 이름 및 기본 키와 같은 매개 변수.
Response − 작업이 성공하면 사용 된 용량 단위, 테이블 처리 메트릭 및 처리되지 않은 항목과 같은 특성을 나타내는 HTTP 200 응답이 발생합니다.
Java를 사용한 일괄 검색
BatchGet 작업에서 Java를 사용하려면 DynamoDB 클래스 인스턴스를 생성해야합니다. TableKeysAndAttributes 항목에 대한 기본 키 값 목록을 설명하고 TableKeysAndAttributes 개체를 BatchGetItem 방법.
다음은 BatchGet 작업의 예입니다-
DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient (
new ProfileCredentialsProvider()));
TableKeysAndAttributes forumTableKeysAndAttributes = new TableKeysAndAttributes
(forumTableName);
forumTableKeysAndAttributes.addHashOnlyPrimaryKeys (
"Title",
"Updates",
"Product Line 1"
);
TableKeysAndAttributes threadTableKeysAndAttributes = new TableKeysAndAttributes (
threadTableName);
threadTableKeysAndAttributes.addHashAndRangePrimaryKeys (
"ForumTitle",
"Topic",
"Product Line 1",
"P1 Thread 1",
"Product Line 1",
"P1 Thread 2",
"Product Line 2",
"P2 Thread 1"
);
BatchGetItemOutcome outcome = dynamoDB.batchGetItem (
forumTableKeysAndAttributes, threadTableKeysAndAttributes);
for (String tableName : outcome.getTableItems().keySet()) {
System.out.println("Table items " + tableName);
List<Item> items = outcome.getTableItems().get(tableName);
for (Item item : items) {
System.out.println(item);
}
}
다음과 같은 더 큰 예를 검토 할 수 있습니다.
Note− 다음 프로그램은 이전에 생성 된 데이터 소스를 가정 할 수 있습니다. 실행을 시도하기 전에 지원 라이브러리를 확보하고 필요한 데이터 소스 (필수 특성이있는 테이블 또는 기타 참조 소스)를 작성하십시오.
이 프로그램은 또한 Eclipse IDE, AWS 자격 증명 파일 및 Eclipse AWS Java 프로젝트 내에서 AWS Toolkit을 사용합니다.
package com.amazonaws.codesamples.document;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.BatchGetItemOutcome;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.TableKeysAndAttributes;
import com.amazonaws.services.dynamodbv2.model.KeysAndAttributes;
public class BatchGetOpSample {
static DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient (
new ProfileCredentialsProvider()));
static String forumTableName = "Forum";
static String threadTableName = "Thread";
public static void main(String[] args) throws IOException {
retrieveMultipleItemsBatchGet();
}
private static void retrieveMultipleItemsBatchGet() {
try {
TableKeysAndAttributes forumTableKeysAndAttributes =
new TableKeysAndAttributes(forumTableName);
//Create partition key
forumTableKeysAndAttributes.addHashOnlyPrimaryKeys (
"Name",
"XYZ Melt-O-tron",
"High-Performance Processing"
);
TableKeysAndAttributes threadTableKeysAndAttributes =
new TableKeysAndAttributes(threadTableName);
//Create partition key and sort key
threadTableKeysAndAttributes.addHashAndRangePrimaryKeys (
"ForumName",
"Subject",
"High-Performance Processing",
"HP Processing Thread One",
"High-Performance Processing",
"HP Processing Thread Two",
"Melt-O-Tron",
"MeltO Thread One"
);
System.out.println("Processing...");
BatchGetItemOutcome outcome = dynamoDB.batchGetItem(forumTableKeysAndAttributes,
threadTableKeysAndAttributes);
Map<String, KeysAndAttributes> unprocessed = null;
do {
for (String tableName : outcome.getTableItems().keySet()) {
System.out.println("Table items for " + tableName);
List<Item> items = outcome.getTableItems().get(tableName);
for (Item item : items) {
System.out.println(item.toJSONPretty());
}
}
// Confirm no unprocessed items
unprocessed = outcome.getUnprocessedKeys();
if (unprocessed.isEmpty()) {
System.out.println("All items processed.");
} else {
System.out.println("Gathering unprocessed items...");
outcome = dynamoDB.batchGetItemUnprocessed(unprocessed);
}
} while (!unprocessed.isEmpty());
} catch (Exception e) {
System.err.println("Could not get items.");
System.err.println(e.getMessage());
}
}
}