Google App Engine中的父级属性和引用属性有什么区别?

10 投票
2 回答
1092 浏览
提问于 2025-04-11 09:34

根据我的理解,db.Model的parent属性(通常是在构造函数中定义或传入的)可以让你在数据模型中建立层级关系。这样做会增加实体组的大小。不过,我不太明白为什么我们要这样做。这是为了确保ACID特性吗?我想看看在什么情况下使用这个属性更合适或更好。

2 个回答

8

实体组(通过父属性定义)唯一的目的就是让不同的实体之间能够进行事务处理。如果你不需要这种事务处理,就没必要使用实体组的关系。

我建议你再看看文档中的键和实体组这一部分,我当时读了好几遍才弄明白这个概念。

另外,可以看看这些讲座,里面讨论了事务和实体组等内容:

15

这里有几个不同之处:

  • 所有有相同祖先的实体都属于同一个实体组。事务(也就是一系列操作)只能影响同一个实体组里的实体。
  • 对一个实体组的所有写入操作都是按顺序进行的,所以处理速度是有限的。
  • 父实体在创建时就确定了,之后是不能更改的。而引用可以随时更改。
  • 使用引用属性时,你只能查询直接的关系,但使用父属性时,你可以通过 .ancestor() 这个过滤器找到所有(直接或间接)从某个祖先派生的实体。
  • 每个实体只能有一个父实体,但可以有多个引用属性。

撰写回答