本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
如果需要,创建 DynamoDB 表
创建 DynamoDbTable
实例后,使用它在 DynamoDB 中一次性 创建表。
创建表示例代码
以下示例基于 Customer
数据类创建一个 DynamoDB 表。
此示例创建了一个 DynamoDB 表,其名称为 Customer
(与类名称相同,但表名称可以是其他名称)。不管您如何为表命名,都必须在其他应用程序中使用该名称才能使用该表。为了使用底层 DynamoDB 表,每次创建另一个 DynamoDbTable
对象时,都要为 table()
方法提供此名称。
传递给 createTable
方法的 Java lambda 参数 builder
允许您自定义表
customerTable.createTable();
使用默认设置时,不会设置预置吞吐量的值。取而代之的是,表的计费模式将设置为按需。
该示例还在尝试打印出响应中收到的表名称之前使用了 DynamoDbWaiter
。创建表需要一些时间。因此,使用 waiter 意味着您不必编写在使用表之前轮询 DynamoDB 服务,以查看表是否存在的逻辑。
import com.example.dynamodb.Customer; import software.amazon.awssdk.core.internal.waiters.ResponseOrException; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.TableSchema; import software.amazon.awssdk.services.dynamodb.model.DescribeTableResponse; import software.amazon.awssdk.services.dynamodb.waiters.DynamoDbWaiter;
代码
public static void createCustomerTable(DynamoDbTable<Customer> customerTable, DynamoDbClient standardClient) { // Create the DynamoDB table using the 'customerTable' DynamoDbTable instance. customerTable.createTable(builder -> builder .provisionedThroughput(b -> b .readCapacityUnits(10L) .writeCapacityUnits(10L) .build()) ); // The DynamoDbClient instance (named 'standardClient') passed to the builder for the DynamoDbWaiter is the same instance // that was passed to the builder of the DynamoDbEnhancedClient instance that we created previously. // By using the same instance, it ensures that the same Region that was configured on the standard DynamoDbClient // instance is used for other service clients that accept a DynamoDbClient during construction. try (DynamoDbWaiter waiter = DynamoDbWaiter.builder().client(standardClient).build()) { // DynamoDbWaiter is Autocloseable ResponseOrException<DescribeTableResponse> response = waiter .waitUntilTableExists(builder -> builder.tableName("Customer").build()) .matched(); DescribeTableResponse tableDescription = response.response().orElseThrow( () -> new RuntimeException("Customer table was not created.")); // The actual error can be inspected in response.exception() logger.info("Customer table was created."); } }
注意
从数据类生成表时,DynamoDB 表的属性名称以小写字母开头。如果您希望表的属性名称以大写字母开头,请使用 @DynamoDbAttribute(NAME) 注释并提供所需的名称作为参数。