PutItem进入DynamoDB很慢

时间:2018-05-14 21:52:01

标签: amazon-web-services go amazon-ec2 bigdata amazon-dynamodb

我有一个EC2实例,它打开一个json文件,读取每一行并对两个表执行putItem操作。

如果没有putItem操作,Golang会在大约3秒钟内解析67k行文件。

使用putItem操作,它每5分钟处理10k个项目。对dynamodb的put操作没有受到限制。 WCU和RCU已相应设置。那么putItem操作是否有理由阻止代码?

我认为Golang正在等待每个put操作成功?

还是很不确定,如果有人使用golang对dynamodb进行了大量插入,那么如果你对如何规避这一点有所了解就会有所帮助。

1 个答案:

答案 0 :(得分:2)

这种缓慢来自这样一个事实:每个插入都必须对发电机进行完整的HTTP往返。

5分钟内的10k物品每件约30ms,这是HTTP旅行的预期。

您可以使用批量更新docs here

在文档中,您有BatchWriteItemInput,其中map[string][]*WriteRequest

type BatchWriteItemInput struct {
    // ... trimmed

    RequestItems map[string][]*WriteRequest

    ...
}

WriteRequest模型有点奇怪,因为它用于DeletePut操作,只需忽略DeleteRequest *DeleteRequest字段。

重要的是要注意批处理操作有一些限制:

  • 您无法在批量请求中多次更改同一项目
  • 批次中必须包含2个以上且少于25个项目
  • 每个项目不能超过400KB,总批量不能大于16MB。