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

如果没有putItem操作,Golang将在3秒钟内解析一个67k的行文件。

通过putItem操作,它每5分钟处理1万个项目。 dynamodb的put操作不会受到限制。相应地设置了WCU和RCU。因此,是否有原因putItem操作阻止了代码?

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

仍然非常不确定,如果有人使用golang对dynamodb进行了大规模插入,那么如果您对如何避免这种情况有所了解会很有帮助。

最佳答案

之所以缓慢,是因为每个插件都必须对dynamo执行一次完整的HTTP往返。

5分钟内1万个项目大约每个项目30毫秒,这是HTTP行程的预期。

您可以使用批处理更新docs here

在文档中,您有BatchWriteItemInput,它需要一个map[string][]*WriteRequest

type BatchWriteItemInput struct {
    // ... trimmed

    RequestItems map[string][]*WriteRequest

    ...
}
WriteRequest模型有点奇怪,因为它同时用于DeletePut操作,只需要忽略DeleteRequest *DeleteRequest字段即可。

请务必注意,批处理操作有一些限制:
  • 您不能在一个批处理请求中多次更改同一项目
  • 批处理
  • 中必须有2个以上且少于25个项目
  • 每个项目的大小不能超过400KB,总批次不能大于16MB。
  • 10-04 16:23