Как создать уникальные имена ключей в Google App Engine
У меня проблемы с выяснением того, как создать уникальные ключевые имена для моего приложения для онлайн-выборов. Вот типичный набор соответствующих объектов:
- 1 выборы
- 5 кандидатов
- 100 000 избирателей
- до 100 000 голосов
Мне нужно уникальное имя ключа для каждой сущности избирателя по причинам, изложенным здесь. Адрес электронной почты будет уникальным для избирателя на определенных выборах, но не обязательно для нескольких выборов (так как один и тот же избиратель может участвовать в нескольких выборах).
Если Election был родительским объектом объектов избирателя, то для получения уникального ключа было бы достаточно использовать электронную почту избирателя в сочетании с родительским объектом выборов. Так как мне нужно использовать транзакции при обновлении сущностей избирателя (чтобы убедиться, что избиратель не может голосовать более одного раза), я думаю, что я не хочу использовать группу сущностей, потому что только один избиратель может обновляться одновременно в соответствии с документами.
Другим решением может быть создание уникального ключа для каждого избирателя в форме:
E<election ID>_<voter email>
например,
E1001_john@example.com
Это разумный способ создать уникальное имя ключа для каждого объекта избирателя?
2 ответа
Перепроверьте свои предположения. На самом деле, существует ситуация, которая может помешать уникальности идентификатора:
Что если два избирателя используют один и тот же адрес электронной почты? Я знаю, что между моими родителями есть только один. Как бы то ни было, ваш идентификатор будет конфликтовать.
Есть множество способов минимизировать столкновения. Если худшее становится худшим, вы можете хэшировать некоторую информацию избирателя. Стреляйте, вы можете даже хэшировать точное время, в которое вы создаете идентификатор.
(Хм... я думаю, мне нравятся вещи...)
Самое простое решение? Делайте то, что люди в базах данных делают для идентификаторов: число. Каждый раз, когда вы добавляете нового избирателя, увеличивайте число. Первый добавленный вами избиратель будет иметь идентификатор 1, второй будет иметь идентификатор 2 и т. Д. Если вам нужно, вы можете преобразовать идентификатор в строку.
Но не думайте, что данные уникальны. Два человека могут иметь одно и то же имя, почтовый адрес, адрес электронной почты, номер телефона и т. Д.
Надеюсь, что это дает вам некоторые идеи!
Это должно быть уникальным. Я, вероятно, сам использовал бы GUID и привязал его к хранилищу данных с уникальным ограничением для сеанса голосования и избирателя, но это всего лишь личное предпочтение.