Amazon web services 为什么我的DynamoDB扫描速度如此之快,只有一个配置的读取容量单元?

Amazon web services 为什么我的DynamoDB扫描速度如此之快,只有一个配置的读取容量单元?,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,我做了一张有1346个项目的桌子,每个项目的大小都小于4KB。我设置了1个读取容量单元,因此我希望平均每秒读取1个项目。然而,对所有1346项的简单扫描几乎会立即返回 这里我遗漏了什么?这可能是因为您在300秒的时间内获得了用于burstable操作(例如扫描整个表)的容量 这意味着,如果您使用所有这些积分,其他交互将受到影响,因为它们没有足够的可用容量 您可以通过CloudWatch metrics或DynamoDB界面本身(通过metrics选项卡)查看消耗的WCU/RCU数量。您不提供条目

我做了一张有1346个项目的桌子,每个项目的大小都小于4KB。我设置了1个读取容量单元,因此我希望平均每秒读取1个项目。然而,对所有1346项的简单扫描几乎会立即返回

这里我遗漏了什么?

这可能是因为您在300秒的时间内获得了用于burstable操作(例如扫描整个表)的容量

这意味着,如果您使用所有这些积分,其他交互将受到影响,因为它们没有足够的可用容量


您可以通过CloudWatch metrics或DynamoDB界面本身(通过metrics选项卡)查看消耗的WCU/RCU数量。

您不提供条目大小,只说“每个条目小于4KB”。少多少

1个RCU将支持每秒2次最终一致读取高达4KB的项

换句话说,使用1个RCU和最终一致的读取,您可以每秒读取8KB的数据

如果您的记录为4KB,则每秒可获得2条记录
1KB,8/秒
512B,16/秒
256B,32/秒

因此,前面提到的“突发”功能允许您使用55个RCU。
但是,由于您的记录很小,55个RCU可以“几乎立即”返回数据。

这里有两件事对您有利-一是
扫描操作所需的RCU比您认为的小项目要少得多。另一个是“突发容量”。我将尝试解释这两个方面:

“对于大小不超过4KB的项目,一个RCU每秒可以执行两个最终一致的读取请求。”。这表明,即使该项的大小为10字节,读取它并最终保持一致性也需要花费半个RCU。然而,尽管他们没有在任何地方说明这一点,但这一成本仅适用于
GetItem
操作来检索单个项目。在
扫描
查询
中,您不会为每个项目单独付款。相反,这些操作按顺序扫描存储在磁盘上的数据,您需要为读取的数据量付费。如果您需要1000个小项目,并且DynamoDB必须从磁盘读取的总大小为80KB,那么您将支付80KB/4KB/2,或者10个RCU,而不是500个RCU

这就解释了为什么您阅读了1346项,并且只测量了55个RCU,而不是1346/2=673

第二件对您有利的事情是DynamoDB具有“突发容量”功能:

DynamoDB目前保留最多5分钟(300秒)的未使用读写容量。在偶尔的读或写活动突发期间,这些额外的容量单位可以很快消耗,甚至比您为表定义的每秒配置吞吐量容量还要快


因此,如果您的数据库在您请求之前存在了5分钟,DynamoDB为您保存了300个RCU,您可以很快用完这些RCU。由于300个RCU远远超过了扫描所需的数量(55个),因此扫描速度非常快,没有限制。

在执行查询时,RCU计数适用于读取的数据量,而不考虑读取的项目数。因此,如果您的项目很小,比如说每个都只有几个字节,那么可以在单个4KB RCU中轻松查询它们


这在阅读DynamoDB中的许多项目时也特别有用。现在还不清楚查询许多小项目是否比批量获取它们更便宜、更高效。

如果进行第二次或第三次扫描,会发生什么?我是否遇到了“突发容量”。“当您没有完全使用分区的吞吐量时,DynamoDB会保留一部分未使用的容量,以供以后吞吐量激增时使用。”@ChrisWilliams same resulthm,DynamoDB控制台中的指标是什么,检查读取容量度量SI ran
aws dynamodb扫描-表名见证库事件-返回消耗的总容量
并获得
ConsumedCapacity:CapacityInits:55.0
对于增加的速率,您不是指512和256字节吗?