如何计算Dynamodb提供的容量



我必须从两个分别包含1500万和3000万条记录的dynamoDB表中更新一列。

平均项目大小为300字节
将使用DynamoDBMapperConfig.DefaultBatchWriteRetryStrategy(10(,(请告诉我是否应该更改此值?(

SQS->Lambda

包含所有分区键作为消息的SQS
Lambda具有以下代码,其中SQS触发器的并发性设置为5(请告诉我是否应该更改此值?(

代码:

final DynamoDBQueryExpression<itemSchema> expression = createDynamoDBQueryExpression(partKey);
do {
QueryResultPage<itemSchema> queryPage = mapper.queryPage(itemSchema.class, expression);
List<itemSchema> itemSchema =  queryPage.getResults();
for (itemSchema record : itemSchema) {
record.setField1("Update");
itemSchemaTableWriteItems.add(record);
if (itemSchemaTableWriteItems.size()==25) {
batchWrite(itemSchemaTableWriteItems);
itemSchemaTableWriteItems = new ArrayList<>();
}
}
expression.setExclusiveStartKey(queryPage.getLastEvaluatedKey());
} while (expression.getExclusiveStartKey() != null);

要在2小时内提供多少写入容量来更新所有项目?

由于您的项目平均为300字节,我们假设它们都低于1 KB。这意味着你需要为每个项目写一个单元。

在2小时内更新4500万个项目意味着你需要维持每秒45,000,000/(2*60*60) = 6,250

所以这是一个很好的大致答案。为了实现这一目标,你需要确保你的负载在PKs之间分布良好,这样你就没有热分区,并且你需要确保客户端至少能承受这样的发送量。我建议进行短期试验。

请注意,如果您的表配置较低,然后将级别提高到比以前更高的级别,则添加容量需要一些时间。一个最初配置得很高的新表将在创建时立即获得该容量。

最新更新