我什么时候应该使用ndb.键属性与祖先



在AppEngine的NDB数据存储中,似乎有两种方法可以将对象相互关联。有ndb.KeyProperty和父母/祖先的钥匙。我有点困惑什么时候应该使用其中一个?

现在我一直在专门使用KeyProperty,因为它是最熟悉的,但我想知道什么时候一个比另一个更适合。

祖先

是分层的 - 当你在事物之间有层次关系时,可以使用它们(例如,在论坛系统中,你可能有Forum s,它有Topic s,而s又有Post s)。

KeyProperty本质上不是分层的 - 它只是一个链接。它应该用于项目之间的非分层链接。重用上一段中的论坛示例,可以使用KeyPropertyPost链接到创建User - 因为User不在论坛-主题-帖子层次结构中。它们与所有 3 个相关(例如,User可能会创建帖子、创建主题和/或主持论坛)。

但是,最后,祖先

和键之间的主要权衡在于一致性与吞吐量:基于祖先的查询为您提供了相对于最新更新的强一致性,但由于缺乏分布,对任何给定实体组施加了每秒 1 次修改的限制,并对组施加了最大大小限制。

最新更新