我有一个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
模型有点奇怪,因为它同时用于Delete
和Put
操作,只需要忽略DeleteRequest *DeleteRequest
字段即可。请务必注意,批处理操作有一些限制: