Как создать уникальные имена ключей в Google App Engine - PullRequest
2 голосов
/ 18 июля 2011

Мне сложно понять, как создать уникальные имена ключей для моего приложения для онлайн-выборов. Вот типичный набор соответствующих объектов:

  • 1 выборы
  • 5 кандидатов
  • 100 000 избирателей
  • до 100 000 голосов

Мне нужно уникальное имя ключа для каждой сущности избирателя по причинам, указанным здесь . Адрес электронной почты будет уникальным для избирателя на определенных выборах, но не обязательно на нескольких выборах (поскольку один и тот же избиратель может участвовать в нескольких выборах).

Если бы Выбор был родительским объектом субъектов избирателя, то для получения уникального ключа было бы достаточно использовать электронную почту избирателя в сочетании с родителем выборов. Так как мне нужно использовать транзакции при обновлении сущностей избирателя (чтобы убедиться, что избиратель не может голосовать более одного раза), я думаю, что я не хочу использовать группу сущностей, потому что только один избиратель может обновляться одновременно в соответствии с * Docs 1018 *.

Другим решением может быть создание уникального ключа для каждого избирателя в форме:

E<election ID>_<voter email>

например.,

E1001_john@example.com

Это разумный способ создать уникальное имя ключа для каждой сущности избирателя?

Ответы [ 2 ]

3 голосов
/ 18 июля 2011

Дважды проверьте ваши предположения. На самом деле, существует ситуация, которая может помешать уникальности идентификатора:

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

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

(Хм ... Полагаю, мне нравится хэшировать ...)

Самое простое решение? Делайте то, что люди в базах данных делают для идентификаторов: число. Каждый раз, когда вы добавляете нового избирателя, увеличивайте число. Первый добавленный вами избиратель будет иметь идентификатор 1, второй будет иметь идентификатор 2 и т. Д. Если вам нужно, вы можете преобразовать идентификатор в строку.

Но не думайте, что данные уникальны. Два человека могут иметь одно и то же имя, или почтовый адрес, или адрес электронной почты, или номер телефона и т. Д.

Надеюсь, это даст вам несколько идей!

0 голосов
/ 18 июля 2011

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

...