DynamoDB - Разрешение конфликтов глобальных таблиц - PullRequest
0 голосов
/ 24 марта 2019

Конфликты могут возникать, если приложения обновляют один и тот же элемент в разных регионах примерно в одно и то же время. Чтобы обеспечить возможную согласованность, глобальные таблицы DynamoDB используют согласование «последний победитель записи» между одновременными обновлениями, где DynamoDB делает все возможное для определения последнего записывающего устройства. С помощью этого механизма разрешения конфликтов все реплики согласятся с последним обновлением и приблизятся к состоянию, в котором все они имеют идентичные данные.

Это то, что говорят документы AWS. Я не понимаю, как политика «последний писатель выигрывает» может привести к созданию единой глобальной базы данных?

1007 * Е.Г. *

Область 1 получает порядок записи T1 (значение 0) T2 (значение 5) Область 2 получает порядок записи T2 (значение 5) T1 (значение 0)

Записи применяются в другом порядке в 2 местах, и конечный результат отличается. Область 1 имеет значение 5, а область 2 имеет значение 0.

Это действительно то, что делает DynamoDB?

1 Ответ

0 голосов
/ 24 марта 2019

Я бы сказал "нет".Не так, как вы описали.

Разрешение конфликтов применимо только в ситуации, когда T1 является прямой записью в область 1, которая впоследствии реплицируется в область 2 ..., а T2 является почти одновременной прямая запись в один и тот же элемент (разные данные) в области 2, который впоследствии реплицируется в область 1.

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

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

«Последний выигрывает писатель» означает, что когда обновление T2, записанное непосредственно в R2, поступает в R1 посредством репликации,R1 видит, что T2 произошел позднее, чем T1, и применяет его в R1 ... но когда обновление T1, записанное непосредственно в R1, поступает в R2 посредством репликации, R2 видит, что оно произошло раньше, чем T2, и сбрасывает его (не применяется в R2), поскольку T2 была последней записанной записью (во времени).

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