AWS Dynamo db, выбирая ключ - PullRequest
0 голосов
/ 22 сентября 2018

Я использую Dynamo DB для хранения счетов клиентов, где каждый счет имеет свой уникальный идентификатор, который называется invoiceId.

Мои операции чтения будут в основном получать счета для определенного клиента.

1 - если бы я использовал invoiceId в качестве ключа разделения, счета для одного и того же клиента, вероятно, были бы записаны в разныеперегородки. верно ли это предположение, и если это так, следует ли мне беспокоиться об этом?

2- Другой сценарий - использование идентификатора клиента в качестве ключа разделения (группировка счетов для одного и того же клиента в разделе,насколько это возможно), и используйте invoiceId в качестве ключа сортировки. Это правильный подход или есть лучший способ справиться с этим сценарием?

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

1 Ответ

0 голосов
/ 22 сентября 2018

Точка 1: предположение верно

Точка 2: Возможно, это не лучший подход, потому что Dynamodb допускает операцию запроса только для ключа раздела.Если вы не знаете ключ раздела, вам нужно отсканировать (дорогая операция - не рекомендуется) таблицу или создать GSI.

Мое предлагаемое решение: -

Поскольку ваш вариант использования требует получения данных по идентификатору счета-фактуры, лучше использовать Invoice id в качестве ключа раздела.

Идентификатор счета-фактуры - ключ раздела

В случаеесли у вас есть другой вариант использования, чтобы получить все счета для client id, вы можете создать GSI (Глобальный вторичный индекс) с

Идентификатор клиента - Ключ раздела
Идентификатор счета - Ключ сортировки

GSI

Важное примечание: -

В таблице DynamoDB каждое значение ключа должно бытьуникальный.Однако значения ключей в глобальном вторичном индексе не обязательно должны быть уникальными.

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

Еще один важный момент, GSI будет стоить вас.Создавайте GSI, только если у вас есть для него сценарий использования.

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