DynamoDB读取吞吐量低于容量而没有任何限制

问题描述 投票:1回答:2

我遇到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使用率相当低,并且有足够的内存可用。

有什么可能导致这个问题的想法?

java amazon-web-services amazon-ec2 amazon-dynamodb throughput
2个回答
0
投票

每个项目的数据量可能会影响RCU。

见:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ProvisionedThroughput.html

对于最大为4 KB的项目,一个读取容量单位表示每秒一次强烈一致的读取,或每秒两次最终一致读取。如果需要读取大于4 KB的项目,DynamoDB将需要消耗额外的读取容量单位。所需的读取容量单位总数取决于项目大小,以及是否需要最终一致或高度一致的读取。

您需要检查是否使用了一致性读取以及每次读取时获取的数据量。


0
投票

一些想法

  1. 在您的测试中,您是否在所有分区键上传播查询? Dynamo会在所有分区上分配吞吐量,因此您可能会遇到可能无法实现标题吞吐量的分区子集。
  2. 你知道每次读取的数据量是多少吗? 1个读取容量最多可以返回4KB的数据。如果您的某些结果大于4KB,那么1000 RCU的每秒读取次数将少于1000次。
  3. 您知道桌面上有多少分区以及吞吐量是如何分散的吗?单个分区只能有3,000个RCU Temporarily increasing吞吐量会导致您的表生成新的分区 - 吞吐量分布在每个分区上。然后,当您将RCU向下卷绕时,数据将保持在相同数量的分区中,并且RCU的分布更加薄弱。
© www.soinside.com 2019 - 2024. All rights reserved.