PutItem 到 DynamoDB 很慢

WeC*_*nds 3 amazon-ec2 go bigdata amazon-web-services amazon-dynamodb

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

在没有 putItem 操作的情况下,Golang 在大约 3 秒内解析了一个 67k 行的文件。

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

我假设 Golang 正在等待每个 put 操作成功?

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

Zak*_*Zak 7

缓慢来自这样一个事实,即每个插入都必须对 dynamo 进行完整的 HTTP 往返。

5 分钟内处理 10k 个项目,每个项目大约需要 30 毫秒,这是 HTTP 行程的预期。

您可以使用批量更新,文档在这里

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

type BatchWriteItemInput struct {
    // ... trimmed

    RequestItems map[string][]*WriteRequest

    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

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