我在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 使用率相当低,并且有足够的可用内存。
你知道是什么导致了这一切吗?
每个项目的数据量会影响RCU。
见:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ProvisionedThroughput.html
对于最大4 KB的项目,一个读取容量单位表示每秒一次非常一致的读取,或者每秒两次最终一致的读取。如果需要读取大于4 KB的项目,DynamoDB将需要消耗额外的读取容量单位。所需的读取容量单位总数取决于项目大小,以及您想要最终一致的读取还是强一致的读取。
您需要检查是否使用了一致读取,以及每次读取获取的数据量。
一些想法