DynamodB обновляет денормализованные данные и сохраняет согласованность - PullRequest
0 голосов
/ 11 февраля 2019

Я использую DynamodB с Python API и денормализую свои данные, чтобы обеспечить быстрое чтение.Смысл в том, что я беспокоюсь о сохранении согласованности при обновлении моих данных, скажем, у меня есть таблица пользователей, у каждого есть ключ и имя, и у таблицы покупок есть ключ и данные, содержащие ключ покупателя (пользователя) иимя покупателя

Я хотел бы обновить имя пользователя и обновить все его покупки, используя атомарную операцию, как описано в firebase (многоканальное обновление), объяснено здесь

Как я могусделай это?

Спасибо

1 Ответ

0 голосов
/ 19 февраля 2019

Вот хорошая документация о транзакции Dynamodb .

Вот несколько основных моментов поста в блоге.

  1. Dynamodb поддерживает возможность транзакции across multiple table, где вы can also have pre-condition on every insert (т.е. вставляете в таблицу заказов только если prev_snapshot = 1223232, это гарантирует, что вы изменяете только последние прочитанные данные.)

  2. Существует 2 типаполучает поддержку TransactGetItems и возможный / строго согласованный GetItem.В TransactGetItems, if a transaction is in progress the request is rejected.в то время как в других 2 случаях последние подтвержденные данные возвращаются в соответствии с вашими требованиями согласованности.

  3. Транзакции не блокируются, если какой-то другой поток записывает данные в таблицу без транзакции, и если запись успешно выполняется раньшетранзакция завершена, и при транзакции будет выдано исключение.

  4. Никаких дополнительных шагов / разрешений для включения транзакции для одной таблицы регионов не требуется.

  5. Стоимость удваивается за каждое чтение и запись при использовании транзакционных возможностей.

Вот функции, которые не поддерживаются

  1. Transactional capabilities in global table.но этого можно избежать за счет липкости запросов и не должно быть большой проблемой IMO.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...