AWS DynamoDB идемпотентен при условной записи

В документации AWS DynamoDB написано, что:

Условная идемпотентность записи Условная запись может быть идемпотентной, если условная проверка выполняется для того же обновляемого атрибута. Это означает, что DynamoDB выполняет заданный запрос на запись только в том случае, если определенные значения атрибутов в элементе соответствуют ожидаемым на момент запроса.

Например, предположим, что вы отправляете запрос UpdateItem на увеличение Price элемента на 3, но только если Price в настоящее время равно 20. После отправки запроса, но до того, как вы получите результаты обратно, происходит сетевая ошибка, и вы не знаю, был ли запрос успешным. Поскольку эта условная запись идемпотентна, вы можете повторить тот же запрос UpdateItem, и DynamoDB обновит элемент, только если Price в данный момент равен 20.

Последнее предложение меня сбивает с толку. Что делать, если во время ошибки на сервер был отправлен другой безусловный запрос и Price обновился, например, чтобы увеличить Price на 1. Итак, Price увеличивается с 20 до 21. Также предположим, что запрос на безусловное обновление отправляется ПОСЛЕ выдается условный запрос на увеличение Price на 3.

В таком случае, насколько я понимаю, в документации говорится, что условный запрос на повтор не должен увеличивать Price до 23, потому что текущий Price теперь равен 21, а не 20. Однако, если ошибки нет, мы должны ожидать, что Price будет 24, а не 23. .

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

Проясните мое замешательство по поводу идемпотентной операции в AWS DynamoDB.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
1
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Но в любом случае вы получите желаемый результат.

Вы хотели увеличить значение на 1, но только если текущее значение равно 20. Если это так, вы преуспеете, а в противном случае потерпите неудачу, независимо от повторных попыток.

Тот факт, что вы отправляете безусловное обновление для изменения элемента, меняет сценарий, но ожидаемым образом.

Ваш запрос на условную проверку по-прежнему был идемпотентным и мог быть выполнен только в том случае, если цена равна 20.

Ом, это правда. Итак, он ЯВЛЯЕТСЯ идемпотентным.

Kt Student 19.06.2024 12:23

Другие вопросы по теме