Перегрузка глобального индекса DynamoDB против разреженных индексов - PullRequest
1 голос
/ 28 марта 2020

Мы разрабатываем приложение, которое будет использовать DynamoDB в качестве системы хранения.

Мы определили различные шаблоны доступа и, просмотрев документацию по глобальным вторичным индексам, застряли при принятии решения о том, какой подход использовать: Индекс перегрузка или наличие 2 разреженных индексов.

Чтобы дать больше контекста, наше приложение хранит заказы, у нас могут быть внутренние или внешние заказы. Исходя из этого, они будут связаны с клиентом или складом:

Data model

Так как мы хотели бы искать по клиенту и / или складу, мы думали о 2 решениях.

Первое решение - сохранить указанную выше структуру данных и создать 2 индекса:

  • GSI1 - Заказчик (PK)
  • GSI2 ​​- Склад (PK)

Вторым решением является перегрузка другого столбца, например:

Index overloading

Таким образом, требуется только 1 индекс: Назначение ( PK) и запрашивается применяется с префиксом.

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

1 Ответ

0 голосов
/ 26 апреля 2020

Поскольку я не получил никакого ответа, я добавлю свое мнение.

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


Некоторые преимущества, которые я смог найти:

Преимущества использования 2 GSI

  1. Схема данных легче понять (без перегрузки) )
  2. Больше гибкости для развития схемы: если требования изменяются, заказ может быть назначен как клиенту, так и складу.
  3. Способность корректировать лучшие прогнозы (может быть не всегда применима, но вам может понадобиться только 2 поля для шаблона доступа клиента и 3 для хранилища)
  4. Меньшие индексы имеют более высокую производительность

Преимущества при использовании 1 GSI

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

    Пример: Если вы установили 50% RCU и WCU от основной таблицы к каждому из индексов, но у вас есть 70% заказов для клиентов, некоторые запросы будут ограничены.

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

...