根据我的理解,db.Model的parent属性(通常在构造函数调用中定义/传递)允许您在数据模型中定义层次结构.结果,这增加了实体组的大小.但是,我不清楚为什么要这样做.这严格遵守ACID吗?我希望看到每个最适合或更合适的场景.
有几个不同之处:
具有相同祖先的所有实体都在同一实体组中.事务只能影响单个实体组内的实体.
对单个实体组的所有写入都是序列化的,因此吞吐量有限.
父实体在创建时设置并且是固定的.参考文献可以随时更改.
使用引用属性,您只能查询直接关系,但是使用父属性,您可以使用.ancestor()过滤器来查找从给定祖先下降的所有内容(直接或间接).
每个实体只有一个父级,但可以有多个引用属性.
实体组(由父属性定义)的唯一目的是在不同实体之间启用事务.如果您不需要事务,请不要使用实体组关系.
我建议你重新阅读文档中的密钥和实体组部分,我花了很多时间来理解这个想法.
除了其他事项,他们还会讨论交易和实体组:
使用Google App Engine构建可扩展的Web应用程序
在Google App Engine数据存储区的封面下