#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 использует последние выигрыши при записи для разрешения конфликтов.