

# 管理全局表的最佳实践和要求
<a name="globaltables_reqs_bestpractices"></a>

**重要**  
 本文档适用于版本 2017.11.29（旧版）的全局表，对于新的全局表，应避免使用该版本。客户应尽可能使用[全局表版本 2019.11.21（当前版）](GlobalTables.md)，因为相比 2017.11.29（旧版），它提供了更大的灵活性、更高的效率并且消耗的写入容量更少。  
要确定正在使用的版本，请参阅[确定全局表的版本](V2globaltables_versions.md#globaltables.DetermineVersion)。要将现有全局表从版本 2017.11.29（旧版）更新到版本 2019.11.21（当前版），请参阅[DynamoDB 全局表版本](V2globaltables_versions.md)。

使用 Amazon DynamoDB 全局表，您可以跨 AWS 区域复制表数据。全局表中的副本表和二级索引必须具有相同的写入容量设置，以确保正确复制数据。

**Topics**
+ [全局表版本](#globaltables_version.tables)
+ [添加新副本表的要求](#globaltables_reqs_bestpractices.requirements)
+ [管理容量的最佳实践和要求](#globaltables_reqs_bestpractices.tables)

## 全局表版本
<a name="globaltables_version.tables"></a>

DynamoDB 全局表有两个版本：[全局表版本 2019.11.21（当前版）](GlobalTables.md)和[全局表版本 2017.11.29（旧版）](globaltables.V1.md)。客户应尽可能使用全局表版本 2019.11.21（当前版），因为相比 2017.11.29（旧版），它提供了更大的灵活性、更高的效率并且消耗的写入容量更少。

要确定正在使用的版本，请参阅[确定全局表的版本](V2globaltables_versions.md#globaltables.DetermineVersion)。要将现有全局表从版本 2017.11.29（旧版）更新到版本 2019.11.21（当前版），请参阅[升级全局表](V2globaltables_versions.md#upgrading-to-current-version)。

## 添加新副本表的要求
<a name="globaltables_reqs_bestpractices.requirements"></a>

如果要将新副本表添加到全局表中，则必须满足以下每个条件：
+ 表必须与其他所有副本具有相同的分区键。
+ 表必须具有指定的写入容量管理设置。
+ 表必须与其他所有副本同名。
+ 表必须启用 DynamoDB Streams，而流同时包含项目的新旧映像。
+ 全局表中的任何新副本或现有副本表都不能包含任何数据。

如果指定了全局二级索引，则必须满足以下条件：
+ 全局二级索引必须具有相同的名称。
+ 全局二级索引必须具有相同的分区键和排序键（如果有）。

**重要**  
 写入容量设置应在所有全局表的副本表和匹配的二级索引之间设置一致。要更新全局表的写入容量设置，我们强烈建议使用 DynamoDB 控制台或 `UpdateGlobalTableSettings` API 操作。`UpdateGlobalTableSettings` 将写入容量设置的更改应用于所有副本表，并自动匹配全局表中的二级索引。如果您使用 `UpdateTable`、`RegisterScalableTarget` 或者 `PutScalingPolicy` 操作，则应将更改应用于每个副本表并分别匹配二级索引。有关此操作的更多信息，请参见 [Amazon DynamoDB API 参考](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/)的 [UpdateGlobalTableSettings](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateGlobalTableSettings.html)。  
我们强烈建议您启用 Auto Scaling 以管理预置的写入容量设置。如果您希望手动管理写入容量设置，则应为所有副本表配置相同的复制写入容量单位。另外，在全局表中配置相同的复制写入容量单位，以匹配二级索引。  
您还必须拥有适当的 AWS Identity and Access Management (IAM) 权限。有关更多信息，请参阅 [将 IAM 与全局表结合使用](gt_IAM.md)。

## 管理容量的最佳实践和要求
<a name="globaltables_reqs_bestpractices.tables"></a>

在 DynamoDB 中管理副本表的容量设置时，请考虑以下事项。

### 使用 DynamoDB Auto Scaling
<a name="globaltables_reqs_bestpractices.tables.autoscaling"></a>

建议使用 DynamoDB Auto Scaling 管理使用预置模式的副本表的吞吐容量设置的方法。DynamoDB Auto Scaling 会自动调整每个副本表的读取容量单位 (RCU) 和写入容量单位 (WCU)。有关更多信息，请参阅 [使用 DynamoDB Auto Scaling 自动管理吞吐能力](AutoScaling.md)。

如果使用 AWS 管理控制台 创建副本表，默认情况下会为每个副本表启用自动扩缩，并使用默认的自动扩缩设置来管理读取容量单位和写入容量单位。

通过 DynamoDB 控制台或使用 `UpdateGlobalTableSettings` 调用对副本表或二级索引的自动扩缩设置进行的更改将自动应用于所有副本表并匹配全局表中的二级索引。这些更改将覆盖所有现有的自动扩缩设置。这可确保预置的写入容量设置在全局表中的副本表和二级索引之间保持一致。如果您使用 `UpdateTable`、`RegisterScalableTarget` 或者 `PutScalingPolicy` 调用，则应将更改应用于每个副本表并分别匹配二级索引。

**注意**  
 如果自动扩缩不能满足应用程序的容量更改（不可预测的工作负载），或者您不想配置其设置（最小、最大或利用率阈值的目标设置），则可以使用按需模式管理全局表的容量。有关更多信息，请参阅 [按需模式](capacity-mode.md#capacity-mode-on-demand)。  
如果在全局表上启用按需模式，则对复制写请求单元 (RWCU) 的使用将与 RWCU 的预置方式一致。例如，如果您对在另外两个区域中复制的本地表执行 10 次写入操作，则将占用 60 个写入请求单位 (10 \$1 10 \$1 10 = 30; 30 x 2 = 60)。使用的 60 个写入请求单位包括全局表版本 2017.11.29（旧版）用于更新 `aws:rep:deleting`、`aws:rep:updatetime` 和 `aws:rep:updateregion` 属性的额外写入。

### 手动管理容量
<a name="globaltables_reqs_bestpractices.tables.manual-capacity-management"></a>

如果您决定不使用 DynamoDB Auto Scaling，则必须在每个副本表和二级索引上手动设置读取容量和写入容量设置。

每个副本表上的预置的复制写入容量单位 (RWCU) 应设置为跨所有区域的应用程序写入所需的 RWCU 总数乘以 2。这适用于在本地区域发生的应用程序写入和来自其他区域的复制应用程序写入操作。例如，假设您期望每秒对俄亥俄州的副本表进行 5 次写入，并且每秒对北弗吉尼亚州的副本表进行 5 次写入。在本例中，您应该为每个副本表配置 20 个 rWCU（5 \$1 5 = 10；10 x 2 = 20）。

 要更新全局表的写入容量设置，我们强烈建议使用 DynamoDB 控制台或 `UpdateGlobalTableSettings` API 操作。`UpdateGlobalTableSettings` 将写入容量设置的更改应用于所有副本表，并自动匹配全局表中的二级索引。如果您使用 `UpdateTable`、`RegisterScalableTarget` 或 `PutScalingPolicy` 操作，则应将更改应用于每个副本表并分别匹配二级索引。有关更多信息，请参阅 [Amazon DynamoDB API 参考](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/)。

**注意**  
 更新设置 (`UpdateGlobalTableSettings`），则必须在 DynamoDB 中安装 `dynamodb:UpdateGlobalTable`、`dynamodb:DescribeLimits`、`application-autoscaling:DeleteScalingPolicy` 和 `application-autoscaling:DeregisterScalableTarget` 权限。有关更多信息，请参阅 [将 IAM 与全局表结合使用](gt_IAM.md)。