我有一个EC2实例,它打开一个json文件,读取每一行并对两个表执行putItem操作。
如果没有putItem操作,Golang会在大约3秒钟内解析67k行文件。
使用putItem操作,它每5分钟处理10k个项目。对dynamodb的put操作没有受到限制。 WCU和RCU已相应设置。那么putItem操作是否有理由阻止代码?
我认为Golang正在等待每个put操作成功?
还是很不确定,如果有人使用golang对dynamodb进行了大量插入,那么如果你对如何规避这一点有所了解就会有所帮助。
答案 0 :(得分:2)
这种缓慢来自这样一个事实:每个插入都必须对发电机进行完整的HTTP往返。
5分钟内的10k物品每件约30ms,这是HTTP旅行的预期。
您可以使用批量更新docs here
在文档中,您有BatchWriteItemInput
,其中map[string][]*WriteRequest
。
type BatchWriteItemInput struct {
// ... trimmed
RequestItems map[string][]*WriteRequest
...
}
WriteRequest
模型有点奇怪,因为它用于Delete
和Put
操作,只需忽略DeleteRequest *DeleteRequest
字段。
重要的是要注意批处理操作有一些限制: