【问题标题】:AWS DynamoDB write requests throttled when provisioned write capacity is NOT being reached当未达到预置的写入容量时,AWS DynamoDB 写入请求受到限制
【发布时间】:2017-03-28 14:43:59
【问题描述】:

我编写了一个异步数据迁移工具来将数据迁移到 AWS DynamoDB。我们在 Dynamo 的目标表中配置了大量资源。

以下是我们的写入容量图和限制请求图。如果我们甚至没有接近我们的写入容量,为什么这么多的请求会受到限制?所有数据最终都在流动,但非常缓慢,因为我会不断重试。

【问题讨论】:

  • 您要导入的表上是否有全局二级索引?
  • 我在表上有大约 5 个索引,每个索引的写入容量都等于表本身(每个 5000)。
  • 明白了。我在看这个文档:For example, if you Query a global secondary index and exceed its provisioned read capacity, your request will be throttled. If you perform heavy write activity on the table, but a global secondary index on that table has insufficient write capacity, then the write activity on the table will be throttled. 从这里:docs.aws.amazon.com/amazondynamodb/latest/developerguide/…
  • 是的,我想到了那个。不幸的是,每个索引的图表看起来非常相似——许多受限制的写入,以及类似的写入容量图表(低于预置的写入容量)。好主意。
  • 您的阅读能力如何?

标签: c# amazon-web-services amazon-dynamodb


【解决方案1】:

预置的写入吞吐量分布在表的所有分片中。根据表的大小和吞吐量,您的数据分布在分片之间。

( readCapacityUnits / 3,000 ) + ( writeCapacityUnits / 1,000 ) = initialPartitions (rounded up)

还为每 10 GB 的数据创建一个分区。

见Understand Partition Behavior。

如果您的写入请求未分布在多个分区键中,您将在达到预置吞吐量之前遇到限制请求。

在您的具体情况下,您的表至少存在 5 个分区。这意味着每个分片每秒最多可以使用 1,000 个单位的写入容量。

要考虑的第二件事是您的物品的大小。每个写入请求消耗每 1 KB 项目大小的 1 个写入容量单位。

见Write Capacity Units。

总而言之:如果您的写入或读取请求并行命中所有分片,您只能使用 100% 的预置吞吐量。为此,您需要在多个不同的分区键之间分配工作负载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多