如何在更改 WriteUnits 的吞吐量并等待它完成时检查 DynamoDB 状态?

How to check DynamoDB Status while changing Throughput of WriteUnits and wait for it to complete?

如何等待 DynamoDB 活动状态?

我只想升级 DynamoDB,而没有其他进程 scaling/updating table 升级。因此我想知道如何查看是否有任何其他进程正在扩展 DynamoDB table?

根据 docs of dynamodb.waitFor Function 我只能检查 tableExiststableNotExists 状态:

var params = {
  TableName: 'STRING_VALUE' /* required */
};

dynamodb.waitFor('tableExists', params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

然而,这似乎只有 tableExiststableNotExists 状态,但似乎不允许检查 'active' 和 'updating' 状态?

背景:我在一个多工作人员环境中,每个工作人员都试图开始升级,以防达到写入限制。这使得在从 table 读取当前配置的吞吐量并开始新的扩展操作之前必须等待任何 scalings/updates 完成。

一种方法是尝试 UpdateTable 操作并在您收到 ResourceInUseException 时实施重试逻辑(表明其他线程已经在尝试扩展 table)。重试逻辑将重复调用 DescribeTable(在重复调用之间有一些退避逻辑)并等待 ACTIVE 状态(并可能确保新限制不够),然后再次重试 UpdateTable。

您可能已经知道,但以防万一...:)
如果您的方法是在您收到 ProvisionedThroughputExceededException 时自动扩展 table,您需要非常小心地确保您的请求在哈希键 space 中很好地分布(或设置一些硬限制预配的吞吐量)。否则,在最坏的情况下,您的 table 最终可能会自动扩展以支持单个热键,而分配给其他键的大部分容量未被使用。

刚从 aws 得到答复。我上面的代码可能正在运行。在吞吐量发生变化时,table 切换到更新状态。 TableExists 正在等待更新 table。一旦 table 从更新切换回活动状态,它就会回调。

dynamodb.waitFor('tableExists', params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});