针对 DynamoDB 表的基本操作 - Amazon DynamoDB

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

针对 DynamoDB 表的基本操作

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

创建表

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

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

  • 主键。主键可包含一个属性(分区键)或两个属性(分区键和排序键)。您需要提供每个属性的属性名称、数据类型和角色: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。

示例 3:使用“DynamoDB 标准 – 不频繁访问”表类别创建表

要使用“DynamoDB 标准-不经常访问”表类别创建相同的 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 \ --provisioned-throughput \ ReadCapacityUnits=10,WriteCapacityUnits=5 \ --table-class STANDARD_INFREQUENT_ACCESS

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 }, "TableClassSummary": { "LastUpdateDateTime": 1542397215.37, "TableClass": "STANDARD_INFREQUENT_ACCESS" }, "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 } }

描述表

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

重要

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

aws dynamodb describe-table --table-name Music

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

注意

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

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

更新表

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

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

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

在发出 UpdateTable 请求时,表的状态从 AVAILABLE 变为 UPDATING。该表仍然完全可用,而它是 UPDATING。完成此过程后,表状态将从 UPDATINGAVAILABLE

以下 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 中不再存在。

使用删除保护

您可以使用删除保护属性保护表免遭意外删除。为表启用此属性有助于确保在管理员执行常规表管理操作期间不会意外删除表。这将有助于防止您的常规业务运营受到干扰。

表所有者或授权管理员控制每个表的删除保护属性。默认情况下,每个表的删除保护属性为关闭状态。这包括全局副本和从备份中恢复的表。禁用表的删除保护后,任何获得 Identity and Access Management (IAM) 策略授权的用户都可以删除该表。当表启用了删除保护时,任何人都无法将其删除。

要更改此设置,请转到表的其他设置,导航到删除保护面板,然后选择启用删除保护

DynamoDB 控制台、API、CLI/SDK 和 AWS CloudFormation 都支持删除保护属性。CreateTable API 在创建表时支持删除保护属性,并且 UpdateTable API 支持更改现有表的删除保护属性。

注意
  • 如果 AWS 帐户被删除,则该账户的所有数据(包括表格)仍会在 90 天内删除。

  • 如果 DynamoDB 无法访问用于加密表的客户托管密钥,DynamoDB 仍将存档此表。存档包括备份表和删除原始表。

列出表名

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

以下 AWS CLI 示例说明如何列出 DynamoDB 表名。

aws dynamodb list-tables

描述预调配的吞吐量配额

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

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

aws dynamodb describe-limits

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

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