迪纳摩如何计算其准备金限额?

时间:2016-08-10 02:24:22

标签: c# amazon-web-services amazon-dynamodb

我尝试更新大型(数百万条记录)表格,并且我继续获得ProvisionedThroughputExceededException例外,尽管事实上CloudWatch显示我无法接近我的容量/吞吐量限制

我有一个写入容量为200的dynamodb表。我的项目通常是2Kb,我一次发送40个项目,然后睡眠1秒钟。由于发电机每次写入1次写入加上每次写入一次写入,因此大致相当于每秒120(40 * 2)次写入单位,这比我们的写入容量200小。

这是一个长期运行的工作(一夜之间),并且第一个~15,000左右的记录更新就好了没有抱怨,但之后,每次写入都受到限制。我的重试次数呈指数延迟,所以我的工作继续进行,但延迟显然导致了大幅减速。

当我查看平均指标和总指标与我在云监视中的规定相比时,我是方式在限制之下。

Maximum writes

这是最大值,显然平均值会低很多。即使在代码中,我也会进行类似的计算,以编程方式限制我的请求ceil(size of items) / 1000以防止发送超过阈值。

什么是发电机测量我不是,如何正确使用CloudWatch来获得正确的?

如果按照此question的建议,我有热键或分布不均的数据,我该如何检测或发现?有没有办法确定发电机是在一个碎片上颠簸,而不是其他碎片 - 那里的云观察是什么?

1 个答案:

答案 0 :(得分:0)

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Partitions

根据分区键将表拆分为多个分区。 您为表设置的总写入吞吐量将分发到这些分区。 如果对表的访问不够随机(基于所选的分区键),并且最终命中同一分区,超出分区的预配置吞吐量,同时低于表的预配置吞吐量,则可以获得ProvisionedThroughputExceededException。

确保您选择了一个好的分区键(足够随机的键)并且您的访问权限是随机的。

有关分区的更多详细信息

如果您只配置了200次写入,为什么会有多个分区?

单个分区可容纳大约10 GB的数据,最多可支持3,000个读取容量单位或1,000个写入容量单位。

因此,可能是因为您拥有超过10 GB的数据,或者您的项目很大,1次单次写入消耗的数量超过1个写入单位,或者您配置了超过3000个读取容量单位,这将需要额外的分区。 相同的计算适用于附加到父表的全局二级索引。 GSI拥有自己的分区密钥。

容量单位大小

一个读取容量单位=每秒一次强烈一致的读取,或每秒两次最终一致读取,对于大小为4 KB的项目。

一个写入容量单位=每秒一次写入,对于最大1 KB的项目。