Вы никогда не сможете гарантировать строгую согласованность для глобальных таблиц.
Однако, похоже, что существует определенное состояние гонки, которое вы пытаетесь предотвратить, когда обновление перезаписывает удаление, и это можно предотвратить.
Самый простой способ гарантировать, что удаление не сопровождается обновлением, - это использование определенной области в качестве «основной» области для каждого элемента. Если вам нужно обновить или удалить элемент, используйте конечную точку для основного региона. Недостаток заключается в том, что межрегиональные записи будут иметь гораздо большую задержку, чем записи в тех же регионах. Однако это может быть приемлемым компромиссом в зависимости от деталей вашей заявки.
Как вы реализуете это? Вы можете добавить атрибут regionId
к вашей таблице, и каждый раз, когда вы создаете элемент, вы устанавливаете определенный регион, который должен быть основным регионом для этого элемента. Всякий раз, когда вы идете обновить / удалить элемент, прочитайте элемент, чтобы найти главную область элемента и сделайте запрос на обновление / удаление к соответствующей региональной конечной точке.
Так что это принцип, но на самом деле есть что-то, чтобы вам было еще проще. DynamoDB добавляет несколько специальных атрибутов ко всем элементам в глобальной таблице (см. Глобальные таблицы - как это работает ), и один из этих атрибутов - aws:rep:updateregion
, который является регионом, в котором он был последний раз обновлен. Просто убедитесь, что когда вам нужно обновить или удалить элемент, вы читаете этот атрибут и затем используете конечную точку для этого региона, чтобы сделать запрос на обновление / удаление.