DynamoDB Условная проверка существующего элемента без значения атрибута с аннотацией @DynamoDBVersionAttribute - PullRequest
0 голосов
/ 27 апреля 2020

При просмотре документации по атрибуту @DynamoDBVersionAttribute говорится, что для вызовов put или update, когда элемент еще не находится в таблице, он автоматически установит значение 1 для атрибута с аннотацией. https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html

Мне интересно, что произойдет, если элемент существует, но в этом столбце нет значения. По сути, что произойдет, если я захочу добавить новый атрибут версии в таблицу, в которой уже есть куча уже существующих элементов, и я попытаюсь сделать обновление. Вот конкретный сценарий c, на который я смотрю:

Я хочу использовать транзакции DynamoDB для случая, когда мне нужно обновить одну таблицу, а затем увеличить счетчик атрибута в другой таблице. Посмотрев вокруг, я не смог найти никакого способа сделать добавочное добавление в транзакции DDB - единственный способ, которым я знаю, как это сделать, - использовать AttributeValueUpdate + 'AttributeAction.ADD', но это требует использования UpdateItemRequest и DDB уже купили вместо этого используйте элемент «Обновить».

Вместо этого я подумал, что сначала попробую прочитать значение, которое мне нужно увеличить, увеличить его локально, а затем сохранить это значение в транзакции, используя условную проверку обновлять, только если счет не был изменен (версия не была обновлена). Однако таблица со значением приращения еще не имеет версии отслеживания атрибутов, поэтому ее необходимо добавить. После добавления атрибута, как будет выглядеть логика c выше для нового элемента, для которого еще не добавлено значение для атрибута новой версии? Когда я читаю значение версии, я получаю нулевое значение, верно? Так что idk, если бы я был в состоянии правильно установить условную проверку или если условная проверка успешно сравнила бы ноль с нулем (если это даже имеет смысл сделать ...) Мне бы потребовалось заполнить всю таблицу 0 сначала или что-то, прежде чем включить оптимистическую блокировку c, чтобы это работало?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...