siv*_*iva 9 throttling amazon-web-services amazon-dynamodb
我有一个名为 的 dynamodb 表events。在此表中,我存储events用户执行的所有操作(page_view、product_view、add_cart、purchase)。
所以架构是
partition_key : <user_id>
attributes : {"vector" : <[list of events]>}
Run Code Online (Sandbox Code Playgroud)
最近我遇到了这样的问题
An error occurred (ThrottlingException) when calling the UpdateItem operation: Throughput exceeds the current capacity of your table or index.
DynamoDB is automatically scaling your table or index so please try again shortly.
If exceptions persist, check if you have a hot key: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-partition-key-design.html
Run Code Online (Sandbox Code Playgroud)
我认为这与 aws-limits 问题有关,我达到了 awssupport team来增加限制。
增加限制后,我们再次遇到同样的问题。
谁能为此建议一个解决方案?
Mau*_*lik 11
我在 DynamoDB 的单个分区上插入/更新/删除约 1500 到约 3000 条大小约 10kb 的记录时也遇到了这个问题,单个分区消耗约 100000 WCU。
\n这会导致上述异常,
\n让我们了解一下这里的部分异常:
\n\n\n吞吐量超出了表或索引的当前容量。DynamoDB 正在自动扩展您的表或索引,因此请稍后重试
\n
表示超出当前 RCU/WCU(适用于 On-Demand 或 Provision 模式)
\n\n\n如果异常仍然存在,请检查您是否有热键
\n
即所选分区已成为热门分区,因为超过了WCU/RCU
\n请参阅此内容以计算 DynamoDB 中的 RCU/WCU:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughput.html
\n\n\nhttps://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-partition-key-design.html
\n
这里 dynamo 建议根据下面的示例重新设计分区键,因此我的情况属于第二种情况,即我只有单个分区并且在排序器时间内执行高 CRUD 操作。
\n\n现在支持这个用例
\n\n\nDynamo强烈建议您使用指数退避算法。如果\n您立即重试批处理操作,则基础读取或\n写入请求仍可能因各个表的限制而失败。\n 如果使用指数退避来延迟批处理操作,\n批处理中的各个请求更有可能成功。
\n
Dynamo 建议在两者之间添加延迟,考虑到 Dynamo 已经基于 AWS SDK\xe2\x80\x99s 默认实现通过指数退避算法执行了重试,因此重试在这里可能没有帮助。
\n所以我实施了这两个步骤来解决这个问题
\n将我的所有多重操作分成 200 个项目的批次DocumentBatchWrite(对于较小的记录集 ~500 个 ~10kb 大小的记录来说效果很好)
对于数千条记录(上述大小相同),我根据批处理大小在每个批处理操作之间添加了 1-2 秒的延迟。
\n此后,我不会遇到 DynamoDB 的任何限制异常
\n\n\n注意:需要根据记录数调整批量大小和批量操作之间的延迟\n。
\n
请参阅此内容以获取有关 DynamoDB 限制的建议性解决方案:https://aws.amazon.com/premiumsupport/knowledge-center/dynamodb-table-throttled/
\n| 归档时间: |
|
| 查看次数: |
10315 次 |
| 最近记录: |