【发布时间】:2014-10-20 17:05:36
【问题描述】:
我正在努力为应用引擎的 HRD 数据存储区设计一个数据模型。
有两个实体,一个叫Food,另一个叫Ingredient。每个Food 可以有多个Ingredients。对于所有其他Foods 中的所有其他Ingredients,每个Ingredient 都是唯一的。每个Ingredient 都有一个amount 属性。
我希望能够将Food 及其所有Ingredients 更新为一个一致的单元,并且能够通过amount 属性查询所有Foods 中的所有Ingredients。
由于我想查询所有Ingredients,我需要在没有祖先键的情况下存储它们。问题是这样做会阻止我对与单个Food 关联的一批更新执行高度一致的更新。因此,如果对Food 进行两次更新,则Ingredients 的状态不再保证是一致的,甚至最终都无法保证。
我想不出任何解决方案,即使是后台任务和版本化实体也可以做出上述保证。
【问题讨论】:
-
你为什么说你需要在没有祖先密钥的情况下存储它们?即使每个成分都有一个 Food 父级,您仍然可以查询所有成分。
-
哦,对了!那应该可以解决问题,除非此处不适用 1 write/s 的限制?换句话说,对
Food的更新可能会导致在单个实体组内发生十几个Ingredients 更改。 -
是的,这是您需要解决的限制。本文档可能对您有所帮助developers.google.com/appengine/articles/scaling/contention。我将添加我的评论作为答案,因为它似乎已经回答了您的问题。
-
我认为您误解了写入限制。它适用于事务,而不是个人写入。
-
+1。我假设,鉴于“我希望能够将食品及其所有成分更新为一个单一的一致单元”的声明,正在使用交易
标签: google-app-engine data-modeling