36

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

例如..如果我为每秒允许 10 次高度一致读取的 10 个“读取单元”付费,如果我尝试在一秒钟内进行 20 次读取,我是否会受到限制,即使它是仅发生在 20 次读取最后一小时?亚马逊文档和常见问题解答在我能找到的任何地方都没有回答这个关键问题。

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

问:如果我的应用程序执行的读取或写入操作超过了我的预置容量,会发生什么情况?

答:如果您的应用程序每秒执行的读取次数或写入次数超过表的预置吞吐容量允许的次数,则超出预置容量的请求将受到限制,您将收到 400 个错误代码。例如,如果您要求 1,000 个写入容量单位并尝试对 1 KB 项目执行 1,500 次写入/秒,则 DynamoDB 将只允许 1,000 次写入/秒通过,并且您的额外请求将收到错误代码 400。您应该使用 CloudWatch 监控您的请求率,以确保您始终有足够的预置吞吐量来达到您需要的请求率。

4

7 回答 7

46

他们似乎在五分钟的窗口中跟踪写入,并且当您在过去五分钟内的平均值超过您预置的吞吐量时会限制您。

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

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

于 2013-10-02T17:23:34.267 回答
11

DynamoDB 提供“突发容量”,允许从表中读取的数据量出现峰值。您可以阅读更多关于它的信息:http: //docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Bursting

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

于 2015-02-20T10:06:03.133 回答
9

如果我为每秒允许 10 次高度一致读取的 10 个“读取单元”付费,如果我尝试在一秒钟内进行 20 次读取,我是否会受到限制,即使它是最后一小时内发生的仅有的 20 次读取?

是的,这是因为Amazon DynamoDB的概念是快速且可预测的性能以及无缝的可扩展性- 引用的常见问题解答实际上已经正确地解决了这个问题(即您必须从字面上理解操作/秒),尽管在预置中更好地说明了计算Amazon DynamoDB 的吞吐量确实:

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

写入所需的容量单位 = 每秒项目写入数 x 项目大小(四舍五入到最接近的 KB)

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

[强调我的]

但是,为现实世界的用例正确计算这些计算可能很复杂,请确保检查更多详细信息,例如Amazon DynamoDB 中的预置吞吐量指南以及相应的。

于 2012-02-24T00:24:23.950 回答
1

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

于 2012-02-23T23:36:41.193 回答
1

来自AWS

DynamoDB 目前最多保留五分钟(300 秒)未使用的读写容量

DynamoDB 在每个分区的吞吐量配置方面提供了一些灵活性。当您没有充分利用分区的吞吐量时,DynamoDB 会保留一部分未使用的容量,以供以后突增使用吞吐量。DynamoDB 目前最多保留五分钟(300 秒)未使用的读写容量。在偶尔突发的读取或写入活动期间,这些额外的容量单位可能会很快被消耗掉——甚至比您为表定义的每秒预置吞吐量容量还要快。但是,不要将您的应用程序设计为依赖于随时可用的突发容量:DynamoDB 可以并且确实将突发容量用于后台维护和其他任务,恕不另行通知。

于 2016-12-31T11:48:44.507 回答
0

我们将我们的“ write-limit”设置10 units/sec为其中一张桌子。Cloudwatch 图表(见图)显示我们超过了一个单位(11 writes/sec)。我假设有一个小的回旋余地(<= 10%)。再说一次,我只是假设...

于 2012-04-05T12:33:25.490 回答
-2

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

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

于 2017-03-20T11:08:51.747 回答