Amazon DynamoDB吞吐量如何计算和限制?

时间:2012-02-23 23:32:37

标签: amazon-web-services amazon-dynamodb

是每秒平均值吗?每分钟?每小时?

例如..如果我支付10“读取单位”,每秒允许10次高度一致的读取,如果我尝试在一秒钟内完成20次读取,即使只有20次读取,我也会受到限制发生在最后一小时?亚马逊文档和常见问题解答无法在​​我能找到的任何地方回答这个关键问题。

我在FAQ中找到的唯一相关响应完全忽略了如何计算使用率以及何时可能发生限制的问题:

  

问:如果我的应用程序执行的读取或写入次数超过,会发生什么   我的预备能力?

     

答:如果您的应用程序执行更多操作   读/秒或写/秒比表的预配置吞吐量   容量允许,超过您的预配容量的请求将是   受限制,您将收到400个错误代码。例如,如果你   已经要求1000个写入容量单位并尝试做1,500个   写入/秒的1 KB项目,DynamoDB将只允许1,000   写入/秒通过,您将收到错误代码400   你的额外要求。您应该使用CloudWatch来监控您的请求   速率,以确保您始终有足够的预配置吞吐量   达到您所需的请求率。

7 个答案:

答案 0 :(得分:44)

看起来他们会在五分钟的时间内跟踪写入内容,并会在过去五分钟内的平均值超过预配置吞吐量时对您进行限制。

我做了一些测试。我创建了一个吞吐量为1次/秒的测试表。如果我暂时不写信,然后发送请求流,亚马逊似乎在开始限制之前接受了大约300个。

当然,需要注意的是,亚马逊官方文档中没有说明这一点,并且可能随时更改。

答案 1 :(得分:10)

DynamoDB提供了突发容量'这允许从表中读取的数据量的峰值。您可以在http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Bursting

下阅读有关它的更多信息

基本上它是@abjennings注意到的 - 它使用5分钟的窗口来平均从表中读取的数量。

答案 2 :(得分:9)

  

如果我支付10“读取单位”,这允许10个高度一致   每秒读取,如果我尝试在20中读取,我会受到限制   单秒,即使它只发生了20次   最后一小时?

是的,这是由于Amazon DynamoDB 快速且可预测的性能和无缝可扩展性的概念 - 所引用的FAQ实际上已经正确地解决了这个问题(即你必须采取行动) /字面意思),虽然Provisioned Throughput in Amazon DynamoDB确实更好地说明了计算:

  

写入容量单位可让您每秒执行一次写入   对于最大1KB大小的项目。同样,读取容量的单位   使您能够每秒执行一次强烈一致的读取(或两次)   最终一致读取的数量最多为1KB。   较大的物品需要更多的容量。您可以计算数字   通过估算数量来获得所需的读写容量单位   您需要每秒执行读取或写入并乘以   物品的大小(四舍五入到最接近的KB)。

     

写入所需的容量单位=每个项目的写入次数   第二个x项目大小(向上舍入到最接近的KB)

     

容量单位   读取所需* =每秒项目读取次数x项目大小   (向上舍入到最接近的KB)* 如果使用最终一致的读取,则每秒读取的吞吐量将达到两倍。

     

[强调我的]

为实际使用案例进行这些计算可能很复杂,但请务必查看更多详细信息,例如: Provisioned Throughput Guidelines in Amazon DynamoDB也是如此。

答案 3 :(得分:1)

我的猜测是,他们没有明确说明。它可能有可能改变/有区域差异/取决于月亮和星星的位置,或释放信息会鼓励滥用。我会在最糟糕的情况下进行计算。

答案 4 :(得分:1)

来自AWS

DynamoDB目前保留了5分钟(300秒)未使用的读写容量

  

DynamoDB在每分区吞吐量配置方面提供了一些灵活性。当您未充分利用分区的吞吐量时,DynamoDB会保留一部分未使用的容量,以便以后突发吞吐量使用。 DynamoDB目前保留了5分钟(300秒)未使用的读写容量。在偶尔的读取或写入活动突发期间,这些额外的容量单位可以非常快速地消耗 - 甚至比您为表定义的每秒预配置吞吐量容量更快。但是,不要设计您的应用程序,以便它依赖于始终可用的突发容量:DynamoDB可以并确实使用突发容量进行后台维护和其他任务,恕不另行通知。

答案 5 :(得分:0)

我们将其中一个表的“write-limit”设置为10 units/sec。 Cloudwatch图表(see image)显示我们超过了这个单位(11 writes/sec)。我假设有一个小的摆动空间(<= 10%)。我再次假设......

答案 6 :(得分:-2)

https://aws.amazon.com/blogs/developer/rate-limited-scans-in-amazon-dynamodb/

使用google guava库可以使用rateLimiter类来限制消耗的容量。