TryDaxTests.java - Amazon DynamoDB

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

TryDaxTests.java

TryDaxTests.java 파일에는 Amazon DynamoDB의 테스트 테이블에 읽기 작업을 수행하는 메서드가 포함되어 있습니다. 이러한 메서드는 액세스하는 데이터 양에 영향을 받지 않으므로(DynamoDB 클라이언트를 사용하든 DAX 클라이언트를 사용하든) 애플리케이션 로직을 수정할 필요가 없습니다.

여러 가지 방법으로 프로그램을 수정할 수 있습니다.

  • queryTest 메서드를 수정하여 다른 KeyConditionExpression을 사용하도록 합니다.

  • 일부 항목만 반환되도록 scanTest 메서드에 ScanFilter를 추가합니다.

참고

이 프로그램을 실행하려면 DAX SDK for Java 클라이언트와 AWS SDK for Java를 종속 항목으로 사용하도록 Maven을 설정합니다. 자세한 설명은 클라이언트를 Apache Maven 종속 항목으로 사용 섹션을 참조하세요.

또는 DAX Java 클라이언트와 AWS SDK for Java를 모두 다운로드하여 클래스 경로(classpath)에 포함할 수 있습니다. Java 및 DAX 변수를 설정하는 예제는 CLASSPATH 단원을 참조하세요.

import java.util.Iterator; import com.amazonaws.services.dynamodbv2.document.DynamoDB; import com.amazonaws.services.dynamodbv2.document.Item; import com.amazonaws.services.dynamodbv2.document.ItemCollection; import com.amazonaws.services.dynamodbv2.document.QueryOutcome; import com.amazonaws.services.dynamodbv2.document.ScanOutcome; import com.amazonaws.services.dynamodbv2.document.Table; import com.amazonaws.services.dynamodbv2.document.spec.QuerySpec; public class TryDaxTests { void getItemTest(String tableName, DynamoDB client, int pk, int sk, int iterations) { long startTime, endTime; System.out.println("GetItem test - partition key " + pk + " and sort keys 1-" + sk); Table table = client.getTable(tableName); for (int i = 0; i < iterations; i++) { startTime = System.nanoTime(); try { for (Integer ipk = 1; ipk <= pk; ipk++) { for (Integer isk = 1; isk <= sk; isk++) { table.getItem("pk", ipk, "sk", isk); } } } catch (Exception e) { System.err.println("Unable to get item:"); e.printStackTrace(); } endTime = System.nanoTime(); printTime(startTime, endTime, pk * sk); } } void queryTest(String tableName, DynamoDB client, int pk, int sk1, int sk2, int iterations) { long startTime, endTime; System.out.println("Query test - partition key " + pk + " and sort keys between " + sk1 + " and " + sk2); Table table = client.getTable(tableName); HashMap<String, Object> valueMap = new HashMap<String, Object>(); valueMap.put(":pkval", pk); valueMap.put(":skval1", sk1); valueMap.put(":skval2", sk2); QuerySpec spec = new QuerySpec() .withKeyConditionExpression("pk = :pkval and sk between :skval1 and :skval2") .withValueMap(valueMap); for (int i = 0; i < iterations; i++) { startTime = System.nanoTime(); ItemCollection<QueryOutcome> items = table.query(spec); try { Iterator<Item> iter = items.iterator(); while (iter.hasNext()) { iter.next(); } } catch (Exception e) { System.err.println("Unable to query table:"); e.printStackTrace(); } endTime = System.nanoTime(); printTime(startTime, endTime, iterations); } } void scanTest(String tableName, DynamoDB client, int iterations) { long startTime, endTime; System.out.println("Scan test - all items in the table"); Table table = client.getTable(tableName); for (int i = 0; i < iterations; i++) { startTime = System.nanoTime(); ItemCollection<ScanOutcome> items = table.scan(); try { Iterator<Item> iter = items.iterator(); while (iter.hasNext()) { iter.next(); } } catch (Exception e) { System.err.println("Unable to scan table:"); e.printStackTrace(); } endTime = System.nanoTime(); printTime(startTime, endTime, iterations); } } public void printTime(long startTime, long endTime, int iterations) { System.out.format("\tTotal time: %.3f ms - ", (endTime - startTime) / (1000000.0)); System.out.format("Avg time: %.3f ms\n", (endTime - startTime) / (iterations * 1000000.0)); } }