我试图了解dynamo DB预配置吞吐量(RCU / WCU)的工作原理。
我尝试了2种情况,在WCU中进行了更改(分别为1,000和10,000),但是WCU消耗的数字却相同,即809.63。
简而言之,我有123条记录分布在5个文件中,每个记录为400 KB(根据dynamo db限制规则)。在执行这些情况时,没有节流,而且奇怪的是脚本执行时间是相同的,即6秒,即使我分别将WCU计数更改为1k和10k。我的问题是为什么它会这样表现。我想知道您对此的评论。
我的假设是,如果我减少/增加WCU数量,我应该会看到脚本执行时间的变化,而我的情况并非如此。
Dynamo数据库方案测试:
答案 0 :(得分:1)
WCU / RCU不会提高DynamoDB SDK响应时间的速度,它们只是设置容量使用的上限。
顾名思义,读写容量单位是容量单位。它们指示您的表可以读取/写入的最大容量上限。在您的情况下,这意味着您使用的是809.63 WCU,如果您的WCU设置为810以上,那么您将不会收到任何限制请求。但是,如果将WCU降低到800,您将开始看到请求受到限制。
如果您具有一致的TPS,并且知道要使用多少个容量单位,那么只需设置所需的数量即可。就您而言,1k WCU似乎就足够了,与10k相比在性能上没有任何区别,除非您使用超过1k WCU ,在这种情况下,您可以提供更多的容量或实现自动扩展处理它。
有关更多信息,请参见此处:Documentation
编辑:如下面的评论所讨论,如果您使用的容量超出了所提供的容量,则DynamoDB将暂时允许大量的容量来支持它长达5分钟,这可能会导致节流的结果不同
答案 1 :(得分:0)
在回答之前,非常感谢Deiv&Stu找到了这一证据。
DynamoDB的突发容量最多可以消耗300秒的未使用吞吐量。
DynamoDB中的最大项目大小为400KB,1个RCU最多可以读取4KB。
假设您要读取大小为400KB的项目,并且桌上有1个RCU。您可以每100秒检索一次该项目。
由于突发容量,总会有一段时间您可以阅读该项目,因为实际上您一次可以使用多达300个RCU,而不仅仅是1个。
想象一下从该400KB的项目开始表。您需要等待100秒,而无需花费任何RCU,这样您才能获得足够的爆破能力来拿取该物品。 101秒后,您发出请求,花费100个RCU并获得该物品。再过5秒钟后,您再次发出请求,但因节流异常而被拒绝。
因此,DynamoDB不会增加请求延迟以满足您的RCU要求。它要么尽快返回结果,要么抛出异常。