【发布时间】:2013-11-17 04:08:45
【问题描述】:
在 AppEngine 的 NDB 数据存储区中,似乎有两种方法可以将对象相互关联。有ndb.KeyProperty 和parents/ancestors keys。我有点困惑什么时候应该使用其中一个?
现在我一直在使用KeyProperty,因为它是最熟悉的,但我想知道什么时候比另一个更合适。
【问题讨论】:
标签: google-app-engine app-engine-ndb
在 AppEngine 的 NDB 数据存储区中,似乎有两种方法可以将对象相互关联。有ndb.KeyProperty 和parents/ancestors keys。我有点困惑什么时候应该使用其中一个?
现在我一直在使用KeyProperty,因为它是最熟悉的,但我想知道什么时候比另一个更合适。
【问题讨论】:
标签: google-app-engine app-engine-ndb
祖先是分层的 - 当事物之间存在分层关系时可以使用它们(例如,在论坛系统中,您可能有 Forums,而 Topics 又是 Posts)。
KeyProperty 本质上不是分层的——它只是提供了一个链接。它应该用于项目之间的非层次链接。重用上一段中的论坛示例,可以使用KeyProperty 将Post 链接到创建它的User - 因为Users 不在论坛-主题-帖子层次结构中。它们与所有 3 个相关(例如,User 可能会创建帖子、创建主题和/或管理论坛)。
然而,最后,祖先和键之间的主要权衡是一致性与吞吐量:基于祖先的查询为您提供相对于最近更新的强一致性,但对任何给定实体组施加每秒 1 次修改的限制以及由于缺乏分布而对组的最大大小限制。
【讨论】: