首页 > 解决方案 > 嵌入式实体和使用 GCP 数据存储上的祖先路径的实体之间的区别

问题描述

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

我可以理解以下内容。

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

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


现在我正在开发一个像谷歌表单这样的表单模型。

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

标签: google-cloud-platformgoogle-cloud-datastore

解决方案


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

有时您可能会发现将一个实体嵌入为另一个实体的属性很方便。

您仍然有该“容器”实体的 1 写入/秒限制。而且你不能只更新嵌入的“实体”,你必须更新整个“容器”实体。

嵌入的实体可能看起来非常一致,但只是在它与“容器”实体中的其他数据一致的意义上(这里没有什么特别之处,实体内的任何属性都是如此)。在使用其值进行查询时,它最终仍然是一致的。而且您不能在事务中进行此类查询。

另一方面,与祖先联系在一起的实体是真实的、不同的实体,它们都被放置在同一个实体组中。整个实体组受 1 写入/秒的限制。祖先查询的范围仅限于各自的实体组,可以在事务内部完成强一致性。

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

否则,您可以使用嵌入实体或简单的不同类型的普通实体,并使用 Key 属性建立实体之间的关系。另请参阅Google App Engine (Python) 中的电子商务产品类别


推荐阅读