使用GCP数据存储上的祖先路径的嵌入式实体和实体之间的差异

时间:2018-05-29 00:52:29

标签: google-cloud-platform google-cloud-datastore

我无法理解嵌入式实体与使用GCP数据存储区上的祖先路径的实体之间的区别。

我能理解以下事情。

  • 通过使用祖先路径,它可以管理不同类型的实体,但是写入1次/秒限制。
  • 祖先路径使强一致性

但这些与使用嵌入式实体相同。

所以我很困惑如何恰当地使用嵌入式实体和祖先路径。

现在我正在为Google Form等形式开发模型。

它可以自由添加项目,所以我正在考虑使用名为Item的嵌入式实体或创建名为Item的种类,并为Form类使用Ancestor路径。

1 个答案:

答案 0 :(得分:1)

嵌入的“实体”不是真实的实体,它只是嵌入它的“容器”实体内的一个属性。来自Embedded entities(强调我的):

  

有时您可能会发现将一个实体嵌入后很方便   另一个实体的财产

您仍然拥有该“容器”实体的1个写入/秒限制。并且您无法仅更新嵌入的“实体”,您必须更新整个“容器”实体。

嵌入式实体可能出现强烈一致,但只是在与“容器”实体中的其他数据一致的意义上(这里没什么特别的,对于任何内部属性都是如此)实体)。在使用其值进行查询时,它最终仍然是一致的。而且您无法在交易中进行此类查询。

另一方面,由祖先捆绑的实体是真实的,不同的实体,都被放置在同一个实体组中。整个实体组受1个写入/秒限制的约束。祖先查询的范围仅限于相应的实体组,在事务内部可以完全一致。

如果您追求的是强一致性,那么您必须使用数据存储区祖先将各个实体绑定在一起。

否则,您可以使用嵌入的实体或仅使用不同类型的普通实体,并使用Key属性建立实体之间的关系。另请参阅E-commerce Product Categories in Google App Engine (Python)