У нашей команды есть таблица DDB, которая содержит элементы с атрибутом 'state', обозначающим различные состояния жизненного цикла. У нас есть другая таблица, которая отслеживает количество этих элементов по состоянию (ключ разделения - это идентификатор типа контейнера, по которому сгруппированы элементы набора, ключ сортировки - это состояние). В настоящее время мы используем лямбду, чтобы поддерживать счет в syn c, инициируемом потоком ddb в таблице, содержащей элементы, но у нас были некоторые проблемы с этим (задержка, идемпотентность) и мы рассматриваем использование транзакций DynamoDB как способ обновлять таблицу счетчиков синхронно всякий раз, когда мы меняем состояние элемента.
Мне было интересно, есть ли способ сделать атоми c, инкрементальное добавление с использованием AttributeValueUpdate + 'AttributeAction.ADD', например в этом примере но в пределах транзакции DynamoDB, чтобы обновление состояния элемента и увеличение счетчика были операцией ACID, "все или ничего"? Подход в примере использует UpdateItemRequest с AttributeValueUpdate, хотя кажется, что транзакции могут использовать только объект обновления , и я не смог найти способ использовать AttributeValueUpdate с этим объектом. здесь
Из моего понимания Транзакций нет никакого упорядочения для независимых операций, поэтому никакая операция не может зависеть от вывода другой (я не могу прочитать значение, затем добавить к нему в той же транзакции), и если я сначала прочитайте значение, оно может быть изменено ко времени совершения транзакции. Мне не удалось найти какой-либо другой пример увеличения значения внутри транзакции DynamoDB, в надежде, что кто-нибудь скажет мне, возможно ли это.