DynamoDB读取吞吐量低于容量而没有任何限制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DynamoDB读取吞吐量低于容量而没有任何限制相关的知识,希望对你有一定的参考价值。
我遇到Dynamo的问题,其中读取吞吐量远低于预配置容量,而图中没有任何可见的限制。
我的表有100GB的数据类似于:
| Partition Key | Sort Key | Value
| A | A1 | 1
| A | A2 | 21
| A | A3 | 231
...
| A | A200 | 31
| B | B1 | 5
此结构不能更改太多,因为我可以查询与给定键关联的所有值(以及基于与给定分区键关联的排序键的更复杂查询)。 。这导致我限制写入,因为它必须频繁地击中相同的分区,但真正奇怪的是读取吞吐量。该表配置了1000个读取单元,但最大记录吞吐量为每秒600个读取。这与每秒高达10.000个规定的读取单位一致。
在客户端,我每秒发送1000个请求(统一使用速率限制器),因此理论上,读取吞吐量应为每秒1000次读取。即使客户端的请求数量增加,速率也保持不变,并且没有限制读取。
客户端在与Dynamo相同的区域中的EC2 m4.2xlarge实例上运行。我排除了客户端的问题,因为CPU使用率相当低,并且有足够的内存可用。
有什么可能导致这个问题的想法?
每个项目的数据量可能会影响RCU。
对于最大为4 KB的项目,一个读取容量单位表示每秒一次强烈一致的读取,或每秒两次最终一致读取。如果需要读取大于4 KB的项目,DynamoDB将需要消耗额外的读取容量单位。所需的读取容量单位总数取决于项目大小,以及是否需要最终一致或高度一致的读取。
您需要检查是否使用了一致性读取以及每次读取时获取的数据量。
一些想法
- 在您的测试中,您是否在所有分区键上传播查询? Dynamo会在所有分区上分配吞吐量,因此您可能会遇到可能无法实现标题吞吐量的分区子集。
- 你知道每次读取的数据量是多少吗? 1个读取容量最多可以返回4KB的数据。如果您的某些结果大于4KB,那么1000 RCU的每秒读取次数将少于1000次。
- 您知道桌面上有多少分区以及吞吐量是如何分散的吗?单个分区只能有3,000个RCU Temporarily increasing吞吐量会导致您的表生成新的分区 - 吞吐量分布在每个分区上。然后,当您将RCU向下卷绕时,数据将保持在相同数量的分区中,并且RCU的分布更加薄弱。
以上是关于DynamoDB读取吞吐量低于容量而没有任何限制的主要内容,如果未能解决你的问题,请参考以下文章
Amazon DynamoDB:警告“配置的 dynamodb 表 JobDetails 的写入吞吐量小于集群映射容量”