有没有办法创建一个只在一个特定类型内唯一的主键(假设我在这里问正确的问题! - 如果不是,请道歉)我注意到有一个“IdentityType.APPLICATION”选项,但是“Application”似乎是“最小”的选择!!
我有以下内容:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class AuditTrail
{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long ID;
@Persistent
private Date createDate;
@Persistent
private Long AdminID;
public AuditTrail()
{
this.createDate = new Date();
}
public AuditTrail(Long AdminID)
{
this();
this.setAdminID(AdminID);
}
}
但是当我创建一个新条目时,该ID在我的应用程序中的所有项目中是唯一的,因此联系人,管理员,约会,服务等都是单独的“表”(或种类?)所以它好的,彼此都是唯一的,但审计跟踪,可能只有自己的计数空间,这样它就不会干扰我的“实际数据”的数量
我是否以正确的方式问这个问题,我真的试图找出这个实体/种类/财产/关键的东西,但我不确定我是否完全理解这一切在引擎盖下是如何实现的!
答案 0 :(得分:2)
AppEngine旨在实现高可扩展性,并且每种类型缺少唯一标识符是其后果之一。人们经常会询问类似的相关能力,但提供的效率并不高。 Datastore是一个基于BigTable的NoSQL设计,被描述为一个巨大的键值存储。它可以快速检索密钥的值,但考虑到您的许多记录不一定在同一台服务器上,它需要太多的开销来维护它们的一组准确计数(种类)。
如果您尝试在自己的代码中强大地添加功能,则无法避免耗时的操作。因此,您的代码会导致高工作负载和延迟或“延迟”,因为有些人喜欢称之为。可能AppEngine开发人员看到了同样的问题,并选择了速度而不是开发人员友好。
没有什么可以阻止您在应用程序代码中维护自己的计数,甚至将它们保存在数据存储区中。在某些情况下,值得推迟。始终牢记布鲁尔的CAP定理(explanation)。