0

有什么方法可以创建仅在一种特定类型中唯一的主键(假设我在这里问了正确的问题!-如果没有,请道歉)我注意到有一个“IdentityType.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 在我的应用程序中的所有项目中都是唯一的,因此联系人、管理员、约会、服务等都是单独的“表”(或种类?),所以可以彼此都是唯一的,但是审计跟踪可以有自己的计数空间,这样它就不会干扰我的“实际数据”的计数

我是否以正确的方式问这个问题,我真的试图弄清楚这个实体/种类/属性/关键的东西,但我不确定我是否完全理解这一切实际上是如何运作的!

4

1 回答 1

2

AppEngine 是为高可扩展性而设计的,结果之一就是缺少每种种类的唯一标识符。人们经常询问类似的相关能力,但提供起来效率不高。Datastore 是基于 BigTable 构建的 NoSQL 设计,它被描述为一个巨大的键值存储。它可以快速检索键的值,但考虑到您的许多记录不一定在同一台服务器上,维护一组它们(种类)的准确计数需要太多开销。

如果您尝试在自己的代码中稳健地添加功能,则无法避免耗时的操作。因此,您的代码将导致高工作量和延迟或“延迟”,正如某些人喜欢称之为的那样。可能 AppEngine 开发人员看到了同样的问题并选择了速度而不是开发人员友好性。

没有什么能阻止您在应用程序代码中维护自己的计数,甚至将它们保存在数据存储中。在某些情况下,延迟是值得的。始终牢记布鲁尔的 CAP 定理(解释)。

于 2014-01-29T17:25:01.663 回答