如何检查DynamoDB状态,同时chaning WriteUnits吞吐量并等待它完成?

如何等待DynamoDB的活动状态?

我只想升级DynamoDB,而没有其他进程正在缩放/更新表。 因此,我想知道如何查看是否有其他进程正在扩展DynamoDB表?

根据dynamodb.waitFor函数的文档我只能检查tableExists和tableNotExists状态:

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 }); 

然而,这似乎只有“tableExists”和“tableNotExists”状态,但似乎不允许检查“活动”和“更新”状态?

背景:在一个多工作环境中,每个工作人员都会尝试在达到写入限制的情况下开始高档工作。 在从表中读取当前的预置吞吐量并开始新的缩放操作之前,如何使等待任何缩放/更新完成是必要的。

刚从aws得到了答案。 我上面的代码可能工作。 通过改变,表格切换到更新状态。 TableExists正在等待表更新的情况。 一旦表格从更新切换到活动状态,它就会回拨。

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

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

你可能已经知道,但以防万一… 🙂
如果您的方法是在得到ProvisionedThroughputExceededException时自动扩展表,则需要非常小心地确保您的请求在散列密钥空间中分布得很好(或者对预置的吞吐量设置一些硬限制)。 否则,在最坏的情况下,您的表最终可能会自动放大以支持单个热键,其中大部分分配给其他键的容量不被使用。