DynamoDB - Как обрабатывать обновления с использованием шаблона списка смежности?

Итак, в DynamoDB рекомендуемый подход к отношениям «многие ко многим» использует Шаблон списка смежности.

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

Но что, если мне нужно обновить / удалить данные? Эти операции выполняются с конкретным элементом, а не с результатом запроса.

Итак, если у меня есть тысячи реплицированных данных для облегчения операции GET, как я собираюсь обновить все эти реплики?

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


person Mojimi    schedule 07.05.2019    source источник


Ответы (1)


Простой ответ: вы просто обновляете повторяющиеся элементы :) Избыточные данные AFAIK предпочтительнее в базах данных NoSQL, и нет никаких ярлыков для обновления данных.

Это, конечно, работает лучше всего, когда соотношение чтения / записи данных сильно на стороне чтения. И в большинстве повседневных приложений это так (я чувствую, что это может быть неправильно), поэтому обновления данных редки по сравнению с запросами.

DynamoDB имеет несколько утилит, которые могут быть здесь применимы. У обоих есть свои недостатки.

  1. BatchWriteItem позволяет помещать или удалять несколько элементов в одном или нескольких столы. К сожалению, он не позволяет обновлять, поэтому, вероятно, не применим к вашему случаю. Количество операций также ограничено 25.
  2. TransactWriteItems позволяет выполнять атомарную операцию, объединяющую до 10 запросы действий в одной или нескольких таблицах. Опять же количество операций ограничено для вашего случая

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

person kaskelotti    schedule 08.05.2019
comment
Спасибо, я действительно знал об ограничениях API. Я думаю, что единственный способ - это рассчитать затраты на выполнение двух запросов для получения соответствующей информации при каждом чтении по сравнению с выполнением нескольких запросов для обновления дублированной информации при каждом обновлении / удалении. - person Mojimi; 08.05.2019