Электронная почта как первичный ключ для заказов клиентов в DynamoDB? - PullRequest
1 голос
/ 20 мая 2019

У меня есть заказ, который я хочу сохранить в DynamoDB, со следующими полями:

  • Дата заказа: 2019-03-27 02:09 pm
  • Имя: Джон
  • Фамилия: Доу
  • Электронная почта: john@example.com
  • Телефон: 555-11434
  • Адрес: 13 Лоронг Чанги, Санни Шорс
  • Город: Сингапур
  • Почтовый индекс: 654321
  • Страна: Сингапур
  • Статус: новый, подтвержденный, доставленный

(Не определено ни одного уникального идентификатора заказа)

Сначала я объединил имя и фамилию "Джон Доу" в качестве ключа разделения и установил дату заказа в качестве ключа сортировки.Это работало довольно хорошо, пока:

Я подумал, что не могу запросить ключ раздела (имя клиента).Я хочу иметь возможность просматривать заказы клиентов, по клиентам!

Во-вторых, URL-адреса, обращающиеся к порядку, будут выглядеть так: https://example.com/2019-03-27/John%20Doe... то есть пробел вызывает некоторую путаницу.Есть ли более эффективный способ кодировать имя?

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

Шаблоны доступадовольно простыНужен способ:

  • Поиск заказа
  • Поиск по клиенту (может быть имя, адрес электронной почты)
  • Запрос по статусу заказа

Я пытался создать составной ключ со статусом заказа и датой заказа, но это не помогло: Заменить старый элемент новым в DynamoDB

1 Ответ

0 голосов
/ 20 мая 2019

Большинство людей в этом сценарии генерируют UUID для пользователя и делают его ключом раздела.

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

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

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

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