我试图在 NDB 中存储一个层次结构,我很困惑在构造新实体的键时是否应该只使用“父”参数,还是应该在我的模型中包含一个额外的属性来保存父键?
问问题
1057 次
2 回答
5
如果您在键中使用祖先,您将创建一个大实体组(假设树/层次结构的单个根),从写入性能的角度来看,这实际上可能不是您想要的。此外,深层层次结构可能意味着非常大的键。
如果要使用祖先键移动节点,则必须删除并重新创建键的整个子层次结构,其中将父键存储在节点中(或子键存储在父节点中)意味着您只需将不同的键存储在属性中。
如果您通常沿着层次结构走(例如 url 遍历),您可能会发现将子键存储在父级的列表中更有效,假设每个级别不会有太多直接子级,以及存储父级孩子的钥匙。
在决定走哪条路之前,我会详细检查您的实际要求。
于 2013-10-18T16:35:41.990 回答
1
前者。您不需要创建额外的属性,因为它已经为您存储在表示模型路径(实际上是键)的祖先链中。
阅读此链接:https ://developers.google.com/appengine/docs/python/datastore/entities#Python_Ancestor_paths
标识实体的完整密钥由一系列种类标识符对组成,指定其祖先路径并以实体本身的路径终止:
[Person:GreatGrandpa, Person:Grandpa, Person:Dad, Person:Me]
要指定实体的父级,请在创建子实体时使用模型类构造函数的 parent 参数。该参数的值可以是父实体本身或其键;您可以通过调用父实体的 key() 方法来获取密钥。
于 2013-10-18T14:41:36.247 回答