DynamoDB - объединить два свойства таблицы (столбцы) для ключа PartitionKey? - PullRequest
0 голосов
/ 28 мая 2020

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

У меня есть 2 вопроса для следующих случаев использования:

1.) Большинство таблиц состоят из строк, где каждый пользователь в приложении будет иметь от 10 до 200 объектов на портфель (учетные записи например, инвестиции). Поскольку я загружаю данные по userId иfolioId, userId - это первая часть ключа раздела. Тем не менее, что лучше создать ключ сортировки для PortalId или его следует объединить с userId? 10 000 и 250 000. Опять же, лучше ли concat, особенно с учетом того, что не все транзакции загружаются сразу, а только самые последние (на основе transactionDate)?

2.1) PartitionKey: userId, SortKey: portfolioId
or
2.2) PartitionKey: userId + portfolioId, SortKey: transactionDate

Поскольку мои методы get будут получать только самые последние транзакции, дополнительный фильтр используется на transactionDate.

-> Насколько я понимаю, 1.2 и 2.2 являются лучшими проектами, поскольку они должны ускорить извлечение данных, при этом сохраняя равномерное распределение данных по разделам, поскольку ключ начинается с userId, которого в приложении должно быть много оф. Мы очень ценим любой совет или опыт в этом отношении!


UPDATE:

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

Нет необходимости запрашивать весь портфель ios по таким таблицам, как account. Учитывая, что это 1,2 и 2,2, это все еще не очень хороший шаблон?

1 Ответ

1 голос
/ 28 мая 2020

Вы определенно хотите 1.1. Это позволяет вам выполнить запрос по userId и получить весь портфель ios для этого пользователя. 1.2. является анти-шаблоном, userId не выполняет никакой полезной функции, вам нужны userId и портфолио, чтобы получить элемент. В этом случае вам будет лучше просто использовать profolioId в ключе раздела.

Для части 2 вы, вероятно, захотите

Partition Key: PortalId Ключ сортировки: transactionId

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

Если вам также нужно получить самые последние транзакции пользователя, создайте GSI с ключом раздела userId и отсортируйте key of transactionId.

Практически никогда не имеет смысла объединять идентификаторы в ключ раздела. Может иметь смысл объединить идентификаторы в ключ сортировки.

...