目前,我的很多代码都广泛使用祖先来放置和获取对象。但是,我正在寻找改变一些东西。
我最初认为,如果您知道要查找的实体的祖先是谁,那么祖先有助于加快查询速度。但我认为事实证明,祖先对事务支持最有用。我不使用事务,所以我想知道祖先在这里是否是系统的负担而不是帮助。
我拥有的是一个用户实体,以及许多其他实体,例如评论、标签、朋友。一个用户可以创建许多评论、标签和朋友,因此每当用户这样做时,我都会将所有这些新创建的对象的祖先设置为用户。
因此,当我创建评论时,我将祖先设置为用户:
comment = Comment(aUser, key_name = commentId)
现在我这样做的唯一原因是严格用于查询目的。我认为当我想获取某个用户的所有评论以获取具有共同祖先的所有评论而不是查询 authorEmail = userEmail 的所有评论时会更快。
因此,当我想获得某个用户的所有评论时,我会:
commentQuery = db.GqlQuery('SELECT * FROM Comment WHERE ANCESTOR IS :1', userKey)
所以我的问题是,这对祖先有用吗?每个评论是否应该有一个 ReferenceProperty 来引用创建评论的用户对象,并以此过滤?
(另外,我的想法是使用祖先而不是索引的 ReferenceProperty 会节省写入成本。我在这里弄错了吗?)