Обработка конфликтов транзакций DyanmoDB межрегиональной реплики

#database #amazon-web-services #nosql #amazon-dynamodb

#База данных #amazon-веб-сервисы #nosql #amazon-dynamodb

Вопрос:

Поскольку транзакции являются ACID только в одном регионе и не реплицируются до тех пор, пока указанный регион не завершит транзакцию, существует возможность одновременного выполнения транзакций в разных регионах, что недопустимо в одном регионе, а затем, когда эти транзакции реплицируются в другие регионы, они не могут быть завершены из-за некоторыхусловие.

Пример:

Пользователь 1 покупает товар 1 у пользователя 2 в регионе A

Пользователь 3 одновременно покупает товар 1 у пользователя 2 в регионе B

Транзакция региона A завершается, транзакция региона B завершается, и оба начинают реплицироваться в другие регионы. Транзакция 1 не может быть завершена в регионе B, а транзакция 2 не может быть завершена в регионе A, поскольку у пользователя 2 больше нет этого элемента (теперь он принадлежит пользователю 1 и пользователю 3 соответственно).

Как DynamoDB обрабатывает эти конфликты? Базы данных SQL обычно предотвращают это из-за одного узла записи, но поскольку DynamoDB имеет несколько узлов записи, мы можем видеть этот потенциальный конфликт.

Ответ №1:

После завершения транзакции в регионе изменения элементов по отдельности попадают в поток, подлежащий репликации через глобальные таблицы, а не в транзакцию. Транзакция завершена.

В вашем сценарии разрешение конфликтов DynamoDB работает так, как обычно, для каждого отдельного элемента. DynamoDB использует последние выигрыши при записи для разрешения конфликтов.