Amazon DynamoDB
开发人员指南 (API 版本 2012-08-10)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

TryDaxTests.java

TryDaxTests.java 文件包含对 Amazon DynamoDB 中的测试表执行读取操作的方法。这些方法不考虑它们如何访问数据(使用 DynamoDB 客户端还是 DAX 客户端),因此无需修改应用程序逻辑。

您可以通过多种方式修改该程序;例如:

  • 修改 queryTest 方法,使其使用其他 KeyConditionExpression

  • ScanFilter 方法添加一个 scanTest,使得只有部分项目返回到您。

注意

要运行此程序,您可以将 Maven 设置为使用适用于 Java 的 DAX 开发工具包客户端和 AWS 适用于 Java 的开发工具包 作为依赖项。有关更多信息,请参阅使用客户端作为 Apache Maven 依赖项

您也可以下载 DAX Java 客户端和 AWS 适用于 Java 的开发工具包 并将其包含在类路径中。有关设置 Java 和 DAX 变量的示例,请参阅CLASSPATH

import java.util.HashMap; 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)); } }