Мутация AppSync, которая вызывает больше мутаций - PullRequest
0 голосов
/ 26 мая 2018

У меня есть две таблицы: сообщения и пользователи

В распознавателе мутаций createPost я устанавливаю некоторые значения по умолчанию для определенных свойств (например, userId, метка времени создания, флаг isDeleted и т. Д.).Кроме того, я хотел бы увеличить счетчик numPosts пользователя.

Возможно ли это через стандартные средства распознавания?

Если нет, то какая из них лучше и почему?

Альтернатива 1) Использование DynamoDB Stream и запуск лямбда-функции при добавлении новой записи Post, увеличивающей счетчик numPosts пользователя.

Альтернатива 2) Используйте лямбда-преобразователь и переместите туда всю логику вместо стандартного преобразователя.

Ответы [ 3 ]

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

Вы можете использовать операцию BatchPut для одновременного обновления нескольких таблиц.Для получения дополнительной информации обратитесь к Руководству по пакетным операциям Amazon DynamoDB .

Вам необходим такой преобразователь, как

{
  "version" : "2018-05-29",
  "operation" : "BatchGetItem",
  "tables" : {
    "Posts": {
        ...data
    },
    "NumPosts":{
        ...data
    }
  }
}
0 голосов
/ 07 июня 2018

Я пошел по пути «Используйте лямбда-преобразователь и переместите туда всю логику вместо стандартного преобразователя».для моего приложения.

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

Ваш вариантНаблюдение за потоком может иметь больше смысла, если другие изменения могут произойти после факта, а наличие данных в промежуточном состоянии не имеет значения.

Трудно оценить, какой вариант является лучшим без общего контекста.

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

Есть Обновления выражений , которые можно использовать для DynamoDB;и, по-видимому, он входит в справочник шаблонов сопоставления резольвера AppSync для DynamoDB .Проходя через пример кода, приведенный в коде, вам будет полезно работать с некоторым кодом UpdateItem следующим образом:

{
    "version" : "2017-02-28",
    "operation" : "UpdateItem",
    "key": {
        "id" : { "S" : "${context.arguments.id}" }
    },
    "update" : {
        "expression" :  "ADD numPosts :incrCount",
        "expressionValues" : {
           ":incrCount" : { "N" : 1 }
        }
    }
}

РЕДАКТИРОВАТЬ: В этом сообщении предполагается, что ваш *Счетчик 1011 * хранится в виде поля в вашей таблице Users.

...