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

时间:2017-12-18 13:10:58

标签: java amazon-web-services amazon-ec2 amazon-dynamodb throughput

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

有关可能导致此问题的任何想法?

2 个答案:

答案 0 :(得分:0)

每件商品的数据量可能会影响RCU。

请参阅: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ProvisionedThroughput.html

  

一个读取容量单位代表一个强烈一致的读取   对于一个项目,第二个或两个最终一致的读取每秒   到4 KB的大小。如果您需要读取大于4 KB的项目,   DynamoDB需要消耗额外的读取容量单位。该   所需的读取容量单位总数取决于项目大小,   以及您是否希望最终一致或强烈一致   读取。

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

答案 1 :(得分:0)

一些想法

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