PutItem в DynamoDB идет медленно - PullRequest
0 голосов
/ 15 мая 2018

У меня есть экземпляр EC2, который открывает файл json, читает каждую строку и выполняет операцию putItem в двух таблицах.

Без операции putItem Golang анализирует 67-строчный файл за 3 секунды.

С помощью операции putItem он обрабатывает 10 тыс. Элементов каждые 5 минут. Операция put в Dynamodb не регулируется. WCU и RCU были установлены соответственно. Так есть ли причина, по которой операция putItem задерживает код?

Я полагаю, что Голанг ждет, пока каждая операция ввода не завершится?

Все еще совершенно не уверен, что если кто-нибудь сделает массовую вставку в динамодаб с помощью golang, было бы полезно, если бы вы пролили свет на то, как вы это обошли.

1 Ответ

0 голосов
/ 15 мая 2018

Замедление происходит из-за того, что каждая вставка должна выполнить полный обход HTTP в динамо.

10 тыс. Элементов за 5 минут - около 30 мс на элемент, что ожидается от HTTP-отключения.

Вы можете использовать пакетное обновление, документы здесь

В документах у вас есть BatchWriteItemInput, что занимает map[string][]*WriteRequest.

type BatchWriteItemInput struct {
    // ... trimmed

    RequestItems map[string][]*WriteRequest

    ...
}

Модель WriteRequest немного странная, поскольку она используется как для операций Delete, так и Put, просто игнорируйте поле DeleteRequest *DeleteRequest.

Важно отметить, что существуют некоторые ограничения для пакетной операции:

  • Вы не можете изменить один и тот же элемент более одного раза в пакетном запросе
  • В партии должно быть более 2 и менее 25 наименований
  • Каждый элемент не может быть больше 400 КБ, а общая партия не может быть больше 16 МБ.
...