我什么时候应该使用ndb.KeyProperty与祖先?

时间:2013-11-06 03:03:14

标签: google-app-engine app-engine-ndb

在AppEngine的NDB数据存储区中,似乎有两种方法可以将对象相互关联。有ndb.KeyPropertyparents/ancestors keys。关于什么时候我应该使用其中一个,我有点困惑?

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

1 个答案:

答案 0 :(得分:16)

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

Post本质上不是等级的 - 它只是提供了一个链接。它应该用于项目之间的非分层链接。重用上一段中的论坛示例,可以使用KeyPropertyKeyProperty与创建它的Post相关联 - 因为User不在论坛中-topic-post层次结构。它们与所有3个相关(例如,User可能会创建帖子,创建主题和/或审核论坛。

然而,最终,祖先和密钥之间的主要权衡是一致性与吞吐量:基于祖先的查询相对于最近的更新提供了强大的一致性,但对于任何给定的实体组,每秒都会施加1次修改的限制由于缺乏分配而导致该组的最大大小限制。