我一直在阅读常见问题和其他帖子,试图了解DynamoDB在读写容量单位方面的行为。假设我扫描一张桌子,这超出了我的读取容量单位。我是否正确假设DynamoDB将首先限制请求,仍然以较慢的方式返回所有结果?在什么时候请求会失败,而不是被限制?
答案 0 :(得分:2)
如果您的请求超出预配容量,则会收到ProvisionedThroughputExceededException
错误。
Error Handling documentation说:
您的要求率过高。用于DynamoDB的AWS开发工具包自动重试请求以接收此异常。您的请求最终会成功,除非您的重试队列太大而无法完成。使用指数退避减少请求的频率。
另请注意,DynamoDB提供 Burst Capacity 。来自Guidelines for Working with Tables文档:
DynamoDB在每分区吞吐量配置中提供了一些灵活性。如果您没有充分利用分区的吞吐量,DynamoDB会保留一部分未使用的容量,以便以后突发吞吐量使用。 DynamoDB目前保留最多五分钟(300秒)未使用的读写容量。在偶尔的读取或写入活动突发期间,这些额外的容量单位可以非常快速地消耗 - 甚至比您为表定义的每秒预配置吞吐量容量更快。但是,不要设计您的应用程序,以便它依赖于始终可用的突发容量:DynamoDB可以并确实使用突发容量进行后台维护和其他任务,恕不另行通知。
因此,自动重试和突发容量的组合意味着您不太可能收到吞吐量异常。如果您这样做,则以指数方式退避并重试。
某些DynamoDB用户维护Amazon SQS队列以临时存储事务。如果超出吞吐量,它们会将事务存储在SQS队列中。然后,后台进程从队列中检索事务,并在以后有希望获得更多吞吐量时重试它们。