Проверка конфликта чтения во время фиксации в транзакциях DynamoDB - PullRequest
0 голосов
/ 31 октября 2019

Это относится к функции транзакции DynamoDB. У меня есть следующий сценарий:

Случай 1:

Допустим, есть 3 атрибута элемента из 3 разных таблиц в DynamoDB - для простоты мы называем их 'a ',' b 'и' c '.

Теперь у меня есть обработчик API для атомарного преобразования 'a', 'b и' c 'вместе. Этот обработчик спроектирован таким образом, что он может получить запрос POST для «a» или «b» и вычислить «c», а затем передать значения в БД. Таким образом, когда «a» приходит через POST-запрос, процесс-обработчик прочитает «b» из БД, затем вычислит «c» на основе входящего «a» и существующего «b» и, наконец, передаст «a» и «с 'к БД атомным способом. Но, если 'b' видоизменяется каким-либо другим потоком до того, как 'a' и 'c' будут зафиксированы в БД, процесс завершится неудачно (или повторяется с новым значением 'b').

Ниже приведен ожидаемый сценарий:

Предполагается c = (a + b)

t = 0 :

  • В БД: a = 5, b = 10, c = 15

t = 1 :

  • POST-запрос: a = 7

  • Запуск транзакции с БД:

    • a = 7 (из POST)

    • читать 'b' из БД как b = 10

    • вычислять 'c' как c = 17

    • инициировать фиксацию'a' и 'c' в t = 5

    • фиксация не удалась, потому что 'b' стало 20 при t = 3 (некоторыедругой поток мутировал его)

    • при наличии логики повторения процесс снова начнется с чтения «b» из БД как b = 20 с последующими другими оставшимися шагами.

Мой вопрос: Можно ли достичь вышеуказанного результата с помощью транзакций DynamoDB? Может ли DynamoDB выдавать ошибку во время фиксации (из 'a' и 'c'), если какой-то другой поток мутировал 'b' после того, как он был прочитан этим потоком-обработчиком? Кажется, что здесь не поможет функция проверки условий в транзакции.

Случай 2:

Та же ситуация, что и выше, но все три являются частьюта же таблица. Значения «a», «b» и «c» - это три разных атрибута одного и того же элемента. Что будет в этом случае?

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