Эффективный способ обновить каждый элемент Dynamodb на основе атрибута - PullRequest
0 голосов
/ 01 февраля 2019

У нас есть таблица DynamoDB с ~ 8 000 записей в ней, и нам нужно обновить каждую запись.Каждая запись структурирована примерно так: id: 1492357, appIds: [123232], info: "{stringified json}" и что мы хотим сделать, это взять массив «appIds» и вставить его в строковое значение json «info», так что если мы анализируем json, атрибут appIds теперь является атрибутомв JSON.

У нас есть API, который сделает это за нас, вызвав myApi/:id/update, и у нас есть сценарий оболочки, который будет извлекать идентификатор для каждой записи в таблице из динамо.Мы могли бы просто зациклить массив идентификаторов и свернуть API с каждым идентификатором, но это кажется неэффективным.

Есть ли в «Динамо» родной способ сделать что-то подобное (в обход API)?Я также не очень знаком со сценариями или curl, если нет собственного способа сделать это, есть ли более эффективный способ зацикливать наш массив идентификаторов и вызывать API для каждого?Мы не заботимся об ответе API вообще, кроме того, имеет ли он ответ 200 или нет.

Текущий сценарий:

#!/bin/bash

records=`aws dynamodb scan --table-name myTable --attributes-to-get '["id"]' | jq '.'`
count=$(jq '.Count' <<< "${records}")
ids=$(jq -r '.Items | .[] | {id: .id.S} | @base64' <<< "${records}")

echo ========== fetched $count records =========
for id in $ids; do
  _jq() {
    echo ${id} | base64 --decode | jq -r ${1}
  }
  userId=$(_jq '.id')
  url=$(curl myApi/${userId}/update)
  echo $userId :
done
...