【问题标题】:DynamoDB ThrottlingDynamoDB 节流
【发布时间】:2016-04-18 14:59:12
【问题描述】:

我有一个 5 读和 5 写容量的发电机表。在这张表中,我有两条记录。

然后我决定通过一次推送大量写入(一次突发大约 4000 条记录)来查看我会得到什么样的错误响应。蓝色的“消耗”线直接越过红色的“容量”线,但我没有收到任何类型的错误消息。

指标显示正在发生限制,但如果我超过两个容量级别,我的读取和写入仍然会发生。

我已经花费了 30 多分钟将读取和写入远远超出容量,目前还没有错误。

我不确定这是否是因为我在 node js 中使用了官方的 javascript SDK,它可能透明地处理限制并重试限制查询?

我希望有人能给我一些指导。

谢谢

【问题讨论】:

    标签: javascript node.js amazon-web-services amazon-dynamodb


    【解决方案1】:

    只是想在@Luc Hendriks 的答案中添加一个关于节流的通知

    即使在您用完“突发容量”并且 DynamoDb 开始节流之后,您也会相对很少收到 ProvisionedThroughputExceededException(根据我的经验)。这是因为 SDK 静默重试受限制的请求(所以您是对的,SDK 透明地处理限制)。

    您可以使用maxRetries 参数来禁用自动重试,以便在您看到指标限制后立即获得 ProvisionedThroughputExceededException。

    这里是一个如何在不自动重试的情况下执行更新请求的示例:

    var aws_dynamodb = new aws.DynamoDB({maxRetries: 0}),
        aws_dynamodb_doc = new aws.DynamoDB.DocumentClient({service: aws_dynamodb});
    
    // ...
    aws_dynamodb_doc.update(params, function(err, data) {
      // ...
    });
    

    【讨论】:

    • 谢谢。我注意到一个奇怪的“事情”是查询本身的“returnConsumerCapacity”数字。当我查询大约 10,000 条记录的表时,它显示 255,但在 dynamodb 指标中,它只显示消耗了 4.25 容量。对此真的很困惑!
    • 查询这10000条需要多长时间? 4.25 很可能是一段时间(1 分钟或 5 分钟)内的平均值。
    • 是的,正如控制台中所述,指标图表显示 1 分钟内平均每秒消耗的容量单位。因此,如果您进行了一次消耗 255 个单位的查询,并且在那一分钟内您没有进行任何其他查询,则图表显示每秒 255/60=4.25
    【解决方案2】:

    这是因为突发容量。您可以在 AWS 文档中了解更多信息:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Bursting

    基本上,这意味着您可以拥有长达 300 秒的“存储容量”,并在负载达到峰值时将其用作池。在您的情况下,这将是一个包含 1500 个请求的池,您可以立即使用并在容量未使用时再次重新填充。

    【讨论】:

      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 2017-06-30
      • 2014-10-27
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      相关资源
      最近更新 更多