java - GAE 祖先查询黑客 : is this a good practice?

标签 java python entity-framework google-app-engine eventual-consistency

我偶然发现了 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()

只需计算 key 即可再次检索:

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

谢谢。

最佳答案

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

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

不过,你的例子似乎很困惑。您认为仅使用客户的 key 作为报告的父级会获得什么?

关于java - GAE 祖先查询黑客 : is this a good practice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25611832/

相关文章:

java - 如何同步以防止 java.util.ConcurrentModificationException

java - 适用于 Eclipse Luna 的 Google 插件?

java - 如何在 spring 4 中使用不同作业的数据库值动态设置 cron 表达式

php - 在 Laravel 中运行 python 脚本,脚本运行但未完全执行?

c# - 我如何优化此 lambda 表达式以使用 Entity Framework 查询包含单词列表的每一行?

java - 限制用户输入+循环

Python:创建/写入文件直到循环结束

python - 无法使用 anaconda 发行版在 Windows 7 上构建 Slycot

svn - 强制 subversion 不合并特定文件

asp.net-mvc-3 - ASP.NET MVC 3 使用 DI 和存储库与 EF 实现工作单元