我看过很多关于如何在appengine中实现唯一约束的文章和问题,但实际上我没有找到关于为什么这个功能不存在的任何解释。
如果appengine开发人员认为最好不要实现这样的功能,我相信他们有充分的理由,但我有兴趣理解为什么他们这么做。
这一决定是否受到业绩问题的影响?为什么呢?
非常感谢您对此的任何详细解释。
答案 0 :(得分:12)
正如此处链接的帖子http://code.google.com/p/googleappengine/issues/detail?id=178#c14所说,数据存储区的分布式特性使得难以强制执行唯一约束。如果两个应用程序实例同时尝试创建一个实体,每个实体都具有唯一的属性,则实施此操作的唯一方法是在数据存储区中的所有计算机上进行某种协调。
想象一个26人的房间,每张都有一张纸,用一张宠物桌和他们的主人说。每个人用不同的字母表控制每只宠物,例如第1人以字母A开头,第2人以字母B开头,等等。
如果你想确保名为连指手套的宠物是整个数据存储区中唯一的连指手套,这很容易,因为房间里只有一个人参与,他们将能够检查他们的纸张确定连指手套还没有。
如果你想要求所有者也必须是独一无二的,你可以想象每当有人想在他们的桌子上写一个条目时,他们需要与/每个其他人一起检查/确保其他人没有使用所有者名称。这是app引擎的数据存储区不允许对除实体键之外的任何内容进行唯一性约束的根本原因。当数据存储包含数千台服务器时,根本无法做到这一点。
希望你能看出为什么存在这种限制,希望我的深夜打字不难读:D
答案 1 :(得分:3)
您可以看到Google针对其issue list for GAE添加唯一约束的回复。