本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
如果需要,创建 DynamoDB 表
创建DynamoDbTable
实例后,使用它在 DynamoDB 中一次性创建表。
创建表示例代码
以下示例基于Customer
数据类创建 DynamoDB 表。
此示例创建了一个 DynamoDB 表,其Customer
名称与类名相同,但表名可以是其他名称。无论您为表命名什么,都必须在其他应用程序中使用此名称才能使用该表。为了使用底层 DynamoDB 表,请在创建其他DynamoDbTable
对象时为该table()
方法提供此名称。
传递给该createTable
方法的 Java lambda 参数允许您自定义表builder
在此示例中,配置了预置吞吐量。如果您想在创建表时使用默认设置,请跳过生成器,如以下代码段所示。
customerDynamoDbTable.createTable();
使用默认设置时,未设置预置吞吐量的值。相反,该表的计费模式设置为按需。
该示例DynamoDbWaiter
在尝试打印出响应中收到的表名之前还使用了。创建表需要一些时间。因此,使用服务员意味着在使用表之前,您不必编写用于轮询 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> customerDynamoDbTable, DynamoDbClient dynamoDbClient) { // Create the DynamoDB table by using the 'customerDynamoDbTable' DynamoDbTable instance. customerDynamoDbTable.createTable(builder -> builder .provisionedThroughput(b -> b .readCapacityUnits(10L) .writeCapacityUnits(10L) .build()) ); // The 'dynamoDbClient' instance that's passed to the builder for the DynamoDbWaiter is the same instance // that was passed to the builder of the DynamoDbEnhancedClient instance used to create the 'customerDynamoDbTable'. // This means that the same Region that was configured on the standard 'dynamoDbClient' instance is used for all service clients. try (DynamoDbWaiter waiter = DynamoDbWaiter.builder().client(dynamoDbClient).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)注释并提供所需的名称作为参数。