DynamoDB BatchWriteItem - 没有限制?

时间:2013-11-28 12:49:10

标签: php amazon-web-services amazon-dynamodb

在我的表“products_1”中,我配置了1个容量单位读取和1个容量单位写入。

我正在使用AWS PHP SDK使用“BatchWriteItem”将8个项目写入DynamoDB。代码返回了此响应:

Object
(
    [structure:protected] => 
    [data:protected] => Array
        (
            [ConsumedCapacity] => Array
                (
                    [0] => Array
                        (
                            [CapacityUnits] => 8
                            [TableName] => products_1
                        )

                )

            [UnprocessedItems] => Array
                (
                )

        )

)

如您所见,它使用了8个容量单位,这是正确的。

但是当我在AWS Console中检查Monitor时,我在“Throttled Write Requests”图表中看不到任何条目。我原以为写请求会受到限制,因为我认为“BatchWriteItem”会在一秒内写出 8项

我的假设是错的吗?如果没有,我想知道为什么写入不会出现在“Throttled Write Requests”图表中。

3 个答案:

答案 0 :(得分:2)

控制台显示5分钟的平均时间。计算使用单位的总和:8个单位/ 300秒=每秒0.027个单位。看起来你没有受到限制。

引用AWS了解如何计算配置的吞吐量:

  

使用Sum值计算预配置吞吐量。例如,在5分钟的范围内获取Sum值。将Sum值除以5分钟(300)中的秒数,以获得每秒ConsumedWriteCapacityUnits的平均值。您可以将计算值与您提供的Amazon DynamoDB的预配置吞吐量值进行比较。

答案 1 :(得分:2)

Amazon DynamoDB基本上允许突发活动而不会受到限制,但如果您在一段时间内将操作/秒维持在规定金额之上,则会开始受到限制。

对于非批量操作,AWS SDK for PHP还会使用指数退避算法自动重试受限制的请求,因此即使您受到限制,也不一定会在PHP中出错代码。

对于批处理操作,就像您在这里使用一样,您将知道您是否受到限制,因为您将在响应的UnprocessedItems部分显示内容。

单独但相关:如果你计划进行大量的put操作并且担心限制,你应该使用SDK的check out the WriteRequestBatch class,它使用批处理和排队来制作确保你的所有物品最终都放好了。

答案 2 :(得分:0)

来自documentation:

<块引用>

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

因为您为表配置了 1 个 WCU,因此您在 5 分钟内节省了大约 300 个 WCU。因此,您消耗 8 个 WCU 的批处理请求不会受到限制。