针对 DynamoDB 表的基本操作 - Amazon DynamoDB
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

针对 DynamoDB 表的基本操作

类似于其他数据库系统,Amazon DynamoDB 将数据存储在表中。您可以使用一些基本操作来管理表。

创建表

使用 CreateTable 操作可以在 Amazon DynamoDB 中创建表。要创建表,您必须提供以下信息:

  • 表名称。 此名称必须遵循 DynamoDB 命名规则,并且对当前 AWS 账户和区域必须唯一。例如,您可以在美国东部(弗吉尼亚北部)中创建一个 People 表,而在欧洲(爱尔兰)中创建另一个 People 表。但是,这两个表会彼此完全不同。有关更多信息,请参阅命名规则和数据类型

  • 主键。 主键可包含一个属性(分区键)或两个属性(分区键和排序键)。您需要提供属性名称、数据类型以及每个属性的角色:HASH(对于分区键)和 RANGE(对于排序键)。有关更多信息,请参阅主键

  • 吞吐量设置(对于预置表)。 如果使用预置模式,则必须指定表的初始读取和写入吞吐量设置。您可以稍后修改这些设置,也可以启用 DynamoDB Auto Scaling 来管理这些设置。有关更多信息,请参阅 管理 DynamoDB 预置容量表的设置使用 DynamoDB Auto Scaling 自动管理吞吐容量

示例 1:创建预置表

以下 AWS CLI 示例演示如何创建表 (Music)。主键包含 Artist(分区键)和 SongTitle(排序键),它们均具有 String 数据类型。 此表的最大吞吐量为 10 个读取容量单位和 5 个写入容量单位。

aws dynamodb create-table \ --table-name Music \ --attribute-definitions \ AttributeName=Artist,AttributeType=S \ AttributeName=SongTitle,AttributeType=S \ --key-schema \ AttributeName=Artist,KeyType=HASH \ AttributeName=SongTitle,KeyType=RANGE \ --provisioned-throughput \ ReadCapacityUnits=10,WriteCapacityUnits=5

CreateTable 操作返回表的元数据,如下所示。

{ "TableDescription": { "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music", "AttributeDefinitions": [ { "AttributeName": "Artist", "AttributeType": "S" }, { "AttributeName": "SongTitle", "AttributeType": "S" } ], "ProvisionedThroughput": { "NumberOfDecreasesToday": 0, "WriteCapacityUnits": 5, "ReadCapacityUnits": 10 }, "TableSizeBytes": 0, "TableName": "Music", "TableStatus": "CREATING", "TableId": "12345678-0123-4567-a123-abcdefghijkl", "KeySchema": [ { "KeyType": "HASH", "AttributeName": "Artist" }, { "KeyType": "RANGE", "AttributeName": "SongTitle" } ], "ItemCount": 0, "CreationDateTime": 1542397215.37 } }

元素表示表的当前状态 (TableStatus)。CREATING创建表可能需要一段时间,具体取决于您为 ReadCapacityUnitsWriteCapacityUnits 指定的值。 较大的此类值需要 DynamoDB 为表分配更多的资源。

示例 2:创建按需表

使用按需模式创建同一个表 Music

aws dynamodb create-table \ --table-name Music \ --attribute-definitions \ AttributeName=Artist,AttributeType=S \ AttributeName=SongTitle,AttributeType=S \ --key-schema \ AttributeName=Artist,KeyType=HASH \ AttributeName=SongTitle,KeyType=RANGE \ --billing-mode=PAY_PER_REQUEST

CreateTable 操作返回表的元数据,如下所示。

{ "TableDescription": { "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music", "AttributeDefinitions": [ { "AttributeName": "Artist", "AttributeType": "S" }, { "AttributeName": "SongTitle", "AttributeType": "S" } ], "ProvisionedThroughput": { "NumberOfDecreasesToday": 0, "WriteCapacityUnits": 0, "ReadCapacityUnits": 0 }, "TableSizeBytes": 0, "TableName": "Music", "BillingModeSummary": { "BillingMode": "PAY_PER_REQUEST" }, "TableStatus": "CREATING", "TableId": "12345678-0123-4567-a123-abcdefghijkl", "KeySchema": [ { "KeyType": "HASH", "AttributeName": "Artist" }, { "KeyType": "RANGE", "AttributeName": "SongTitle" } ], "ItemCount": 0, "CreationDateTime": 1542397468.348 } }
重要

当对按需表调用 DescribeTable 时,读取容量单位和写入容量单位设置为 0。

描述表

要查看有关表的详细信息,请使用 DescribeTable 操作。您必须提供表名称。来自 DescribeTable 的输出与来自 CreateTable 的输出采用相同的格式。 它包括表创建时的时间戳、表的键架构、预置吞吐量设置、表的估计大小以及存在的任何二级索引。

重要

当对按需表调用 DescribeTable 时,读取容量单位和写入容量单位设置为 0。

aws dynamodb describe-table --table-name Music

TableStatusCREATING 更改为 ACTIVE 后,表即可供使用。

注意

如果您在 DescribeTable 请求后立即发出 CreateTable 请求,则 DynamoDB 可能会返回错误 (ResourceNotFoundException)。这是因为 DescribeTable 使用最终一致性查询,并且表的元数据此时可能不可用。请等待几秒钟,再尝试 DescribeTable 请求。

出于记账目的,您的 DynamoDB 存储成本包含 100 bytes的每项目开销。(有关更多信息,请转到 DynamoDB 定价。) 每个项目的此额外 100 bytes 不用于容量单位计算或用于 DescribeTable 操作。

更新表

利用 UpdateTable 操作,您可以执行下列操作之一:

下面的 AWS CLI 示例说明如何修改表的预置吞吐量设置。

aws dynamodb update-table --table-name Music \ --provisioned-throughput ReadCapacityUnits=20,WriteCapacityUnits=10
注意

当您发出 UpdateTable 请求时,表的状态会从 AVAILABLE 变为 UPDATING。 该表在处于 UPDATING 状态时保持完全可用。 此过程完成后,表状态将从 UPDATING 变为 AVAILABLE

下面的 AWS CLI 示例说明如何将表的读/写容量模式修改为按需模式。

aws dynamodb update-table --table-name Music \ --billing-mode PAY_PER_REQUEST

删除表

您可以使用 DeleteTable 操作删除未使用的表。表的删除操作是不可恢复的。

以下 AWS CLI 示例说明如何删除表。

aws dynamodb delete-table --table-name Music

当您发出 DeleteTable 请求时,表的状态会从 ACTIVE 变为 DELETING。 删除表可能需要一段时间,具体取决于其使用的资源(例如,存储在表中的数据以及表上的任何流或索引)。

DeleteTable 操作结束时,该表在 DynamoDB 中不再存在。

列出表名

操作返回当前 AWS 账户和区域的 ListTables 表的名称。DynamoDB

下面的 AWS CLI 示例演示如何列出 DynamoDB 表名称。

aws dynamodb list-tables

描述预置的吞吐量配额

DescribeLimits 操作会返回当前 AWS 账户和区域的当前读入容量配额。

下面的 AWS CLI 示例说明了如何描述当前的预置吞吐量配额。

aws dynamodb describe-limits

输出显示当前 AWS 账户和区域的读入容量单位配额。

有关这些配额以及如何请求增加配额的更多信息,请参阅吞吐量默认配额