如何在Google应用引擎中创建唯一的密钥名称

时间:2011-07-18 00:35:51

标签: python google-app-engine google-cloud-datastore entity-group-transactions

我无法弄清楚如何为我的在线选举应用创建唯一的关键名称。以下是一组典型的相关实体:

  • 1选举
  • 5名候选人
  • 100,000选民
  • 高达100,000票?

出于表达here的原因,我需要每个选民实体的唯一键名。电子邮件地址对于特定选举中的选民来说是唯一的,但不一定是多次选举(因为同一选民可能是多次选举的一部分)。

如果选举是选民实体的母体实体,那么将选民电子邮件与选举父母一起使用就足以获得一个唯一的密钥。由于我需要在更新选民实体时使用交易(以确保选民不能多次投票)我认为我不想使用实体组,因为根据{{一次只能更新一个选民3}}

另一种解决方案可能是为表单的每个选民创建一个唯一的密钥:

E<election ID>_<voter email>

如,

E1001_john@example.com

这是为每个Voter实体创建唯一键名的合理方法吗?

2 个答案:

答案 0 :(得分:3)

仔细检查你的假设。事实上,有一种情况可能会妨碍身份证的独特性:

如果两个选民使用相同的电子邮件地址怎么办?我知道我父母之间只有一个人。事实上,你的身份证会发生冲突。

有一系列方法可以最大限度地减少碰撞。如果最坏的情况发生,你可以勾选一些选民的信息。拍摄,你甚至可以哈希创建ID的确切时间。

(嗯......我想我有点像哈希的东西......)

最简单的解决方案?做数据库中的人为ID做的事情:一个数字。每次添加新选民时,请增加该数字。您添加的第一个选民的ID为1,第二个的ID为2,依此类推。如果需要,可以将id转换为字符串。

但是,不要认为数据是唯一的。两个人可以使用相同的名称,街道地址,电子邮件地址或电话号码等。

希望能给你一些想法!

答案 1 :(得分:0)

这应该是独一无二的。我可能会自己使用GUID,并将其绑定到数据存储库中,该数据存储库对投票会话和投票人具有唯一约束,但这只是个人偏好。