AWS Уточнение конструкции схемы "многие ко многим" в DynamoDB - PullRequest
0 голосов
/ 14 июля 2020

Мой шаблон доступа / запрос будет выглядеть следующим образом: Получить имя и адрес электронной почты всех друзей по пользователю (пример USER # 1).

Я добавил GSI, чтобы инвертировать PK и SK, что позволит мне запрашивать с помощью SK .

Примеры данных приведены ниже в таблице:

+--------+----------+------+---------------+
|   PK   |    SK    | Name |     Email     |
+--------+----------+------+---------------+
| USER#1 | USER#1   | Bob  | bob@email.com |
| USER#2 | USER#2   | Rob  | rob@email.com |
| USER#3 | USER#3   | Tom  | tom@email.com |
| USER#1 | FRIEND#2 |      |               |
| USER#1 | FRIEND#3 |      |               |
+--------+----------+------+---------------+

Мой вопрос, можно ли найти друзей ПОЛЬЗОВАТЕЛЯ № 1 в одном запросе?

Заранее спасибо.

1 Ответ

1 голос
/ 14 июля 2020

Вариант 1: денормализация

Сохранение данных в следующем формате:

+--------+----------+------+---------------+
|   PK   |    SK    | Name |     Email     |
+--------+----------+------+---------------+
| USER#1 | USER#1   | Bob  | bob@email.com |
| USER#2 | USER#2   | Rob  | rob@email.com |
| USER#3 | USER#3   | Tom  | tom@email.com |
| USER#1 | FRIEND#2 | Rob  | rob@email.com |
| USER#1 | FRIEND#3 | Tom  | tom@email.com |
+--------+----------+------+---------------+
  • Pro: можно запрашивать и получать имя пользователя и адрес электронной почты напрямую
  • Против: обновление становится дорогим

Вариант 2: BatchGetItem

Сохраняйте данные как есть, иначе

+--------+----------+------+---------------+
|   PK   |    SK    | Name |     Email     |
+--------+----------+------+---------------+
| USER#1 | USER#1   | Bob  | bob@email.com |
| USER#2 | USER#2   | Rob  | rob@email.com |
| USER#3 | USER#3   | Tom  | tom@email.com |
| USER#1 | FRIEND#2 |      |               |
| USER#1 | FRIEND#3 |      |               |
+--------+----------+------+---------------+

Затем используйте BatchGetItem API для получения имени и адреса электронной почты для каждого друга.

  • Pro: данные «нормализованы» (меньше дублирования, меньше хранилища)
  • Con: вам нужно выполнить BatchGetItem в l oop, если вы хотите получить все данные друзей
...