google-cloud-platform - 嵌入式实体和使用 GCP 数据存储上的祖先路径的实体之间的区别
问题描述
我无法理解嵌入式实体和使用 GCP 数据存储上的祖先路径的实体之间的区别。
我可以理解以下内容。
- 通过使用祖先路径,它可以管理不同种类的实体,但有写入 1 次/秒的限制。
- 祖先路径使强一致性
但是这些事情与使用嵌入式实体相同。
所以我很困惑如何适当地使用嵌入式实体和祖先路径。
现在我正在开发一个像谷歌表单这样的表单模型。
它可以自由添加项目,所以我正在考虑使用名为 Item 的嵌入式实体或创建名为 Item 的种类并为 Form 类使用 Ancestor 路径。
解决方案
嵌入的“实体”不是真正的实体,它只是嵌入它的“容器”实体内的一个属性。来自嵌入式实体(强调我的):
有时您可能会发现将一个实体嵌入为另一个实体的属性很方便。
您仍然有该“容器”实体的 1 写入/秒限制。而且你不能只更新嵌入的“实体”,你必须更新整个“容器”实体。
嵌入的实体可能看起来非常一致,但只是在它与“容器”实体中的其他数据一致的意义上(这里没有什么特别之处,实体内的任何属性都是如此)。在使用其值进行查询时,它最终仍然是一致的。而且您不能在事务中进行此类查询。
另一方面,与祖先联系在一起的实体是真实的、不同的实体,它们都被放置在同一个实体组中。整个实体组受 1 写入/秒的限制。祖先查询的范围仅限于各自的实体组,可以在事务内部完成强一致性。
如果您追求的是强一致性,那么您必须使用数据存储祖先将各个实体联系在一起。
否则,您可以使用嵌入实体或简单的不同类型的普通实体,并使用 Key 属性建立实体之间的关系。另请参阅Google App Engine (Python) 中的电子商务产品类别
推荐阅读
- c++ - 如何将我的 C++ 编译器输出保存在创建的文本文件中?
- ios - 为整个 collectionView 预取和构建单元格
- php - 如何等待我的脚本使用 PHP Simple HTML DOM Parser 加载页面?
- python - 如何在加载时隐藏海龟中的图形项目
- r - R plotly:在极坐标散点图中添加文本
- html - SVG元素中等效的 Alt 标记
- javascript - Firefox 在 window.print() 之后没有重定向;
- cmd - 带有来自文件的变量的 Cmd curl 数据不起作用
- python - 如何通过数据框进行迭代?
- laravel - 从具有关系 Laravel 5.2 的查询中获取图像