如何在谷歌应用程序引擎中创建唯一的关键名称



我不知道如何为我的在线选举应用程序创建唯一的关键名称。以下是一组典型的相关实体:

    <
  • 1选举/gh><
  • 5候选人/gh>
  • 100000选民
  • 高达100,000票

由于这里所述的原因,我需要为每个Voter实体使用唯一的键名。在一个特定的选举中,一个选民的电子邮件地址是唯一的,但在多个选举中不一定是唯一的(因为同一个选民可能是多个选举的一部分)。

如果选举是选民实体的父实体,那么将选民电子邮件与选举父实体结合使用将足以获得唯一密钥。由于我需要使用事务来更新Voter实体(以确保选民不能投票多次),我认为我不想使用实体组,因为根据文档,一次只能更新一个Voter。

另一个解决方案是为表单的每个投票人创建一个唯一的键:

E<election ID>_<voter email>

E1001_john@example.com

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

仔细检查你的假设。实际上,有一种情况可能会妨碍ID的唯一性:

如果两个选民使用相同的电子邮件地址怎么办?我知道我父母只有一个孩子。事实上,你的ID会冲突。

有很多方法可以最小化碰撞。如果发生最坏的情况,你可以对选民的一些信息进行篡改。你甚至可以散列创建ID的确切时间。

(嗯…我想我有点喜欢散列的东西…)

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

但是,不要假设数据是唯一的。两个人可以有相同的名字,或街道地址,或电子邮件地址,或电话号码等。

希望能给你一些启发!

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

最新更新