0

我偶然发现了 App Engine 的数据存储区的这个功能,即您实际上不必拥有持久的根实体即可与 GAE 具有高度一致的行为。您可以使用计算键来存储和加载子实体。我的问题是:这是一种好的做法,还是过于依赖数据存储区的实现怪癖?

这是一个使用 Python 的示例。我敢肯定,这个习语也适用于 Java。

假设您有一个子实体:

CustomerReport(ndb.Model):
  foo=ndb.StringProperty
  bar=ndb.FloatProperty
  #...

CustomerReports 是根据真实的实体类型 Customer 生成的。但是您可以通过计算不存在的父实体的祖先键来以高度一致性保存此报表实体,如下所示:

ReportRoot(ndb.Model):
  pass

像这样:

CustomerReport(parent=ndb.Key(ReportRoot, customer.key.id()), ... ).put()

只需计算密钥即可再次检索:

CustomerReport.query(ancestor=ndb.Key(ReportRoot, customer.key.id())).fetch()

谢谢你。

4

1 回答 1

2

使用没有相应保存实体的键作为父级是完全可以的。您甚至不需要创建 python 类,只需将名称用作字符串:

parent=ndb.Key('ReportRoot', some_id)

但是,您的示例似乎很混乱。您认为仅将客户的密钥用作报告的父母您会获得什么?

于 2014-09-01T19:33:06.803 回答