У меня есть дилемма о выборе лучшего (синтаксического) значения для ключа раздела для хранения пользовательских данных.
Пользовательский документ имеет:
- идентификатор (гид)
- электронная почта (используется для входа, например)
- данные профиля
Существует 2 основных типа запросов:
- Ищу пользователя по
id
(большинство запросов)
- Поиск пользователя по
email
(логин и некоторые запросы администратора)
Я хочу избежать перекрестных запросов.
Если я выберу id
для partitionKey
(синтетическое поле), тогда запросы на вход в систему будут перекрестными.
С другой стороны, если я выберу email
, то если пользователь когда-либо изменит электронную почту - это проблема.
Что я думаю, так это ввести новый тип в коллекцию. Что-то вроде:
userId: guid,
userEmail: “email1”,
partitonKey: “users-mappings”
тогда я могу иметь User
сам документ как:
id: someguid,
type: “user”,
partitionKey: “user_someguid”,
profileData: {}
таким образом, когда пользователь входит в систему, я сначала проверяю тип / раздел сопоставлений по email
, получаю guid
, а затем проверяю фактический User
документ по guid
.
также, таким образом, электронная почта может быть изменена без влияния на разбиение.
это правильный подход? какие-то проблемы с этим? я что-то упустил?