提问者:小点点

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


我在Dynamo上遇到了一个问题,在图中没有任何可见的节流的情况下,读取吞吐量远远低于规定的容量。

我的表有100GB的数据,类似于:

< code>|分区键|排序键|值| 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个答案

匿名用户

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

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

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

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

匿名用户

一些想法

  1. 在测试中,是否将查询扩展到所有分区键上?Dynamo将吞吐量分布在所有分区上,因此,如果您正在访问分区的子集,则可能无法实现标题吞吐量
  2. 你知道每次读取返回多少数据吗?1读取容量可返回多达4KB的数据。如果您的某些结果大于4KB,则1000个RCU的每秒读取次数将少于1000次
  3. 您知道表上有多少分区,以及吞吐量是如何分布的吗?一个分区只能有3000个RCU。临时增加吞吐量会导致表生成新的分区,而吞吐量分布在每个分区上。然后,当您将RCU卷回时,数据将保留在相同数量的分区中,而RCU的分布更为稀疏