【问题标题】:Hierarchy in Google App Engine NDBGoogle App Engine NDB 中的层次结构
【发布时间】:2013-10-18 14:28:01
【问题描述】:

我正在尝试在 NDB 中存储层次结构,但我很困惑在构造新实体的键时是否应该只使用“父”参数,还是应该在我的模型中包含一个额外的属性来保存父级钥匙?

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

    如果您在键中使用祖先,您将创建一个大实体组(假设树/层次结构的单个根),从写入性能的角度来看,这实际上可能不是您想要的。此外,深层层次结构可能意味着非常大的键。

    如果您想使用祖先键移动节点,则必须删除并重新创建整个子键层次结构,其中将父节点存储在节点中(或子键存储在父节点中)意味着您只需存储不同的键在属性中。

    如果您通常沿着层次结构向下走(例如 url 遍历),您可能会发现将子键存储在父级的列表中更有效,假设每个级别不会有太多直接子级,以及将父密钥存储在子密钥中。

    在决定走哪条路之前,我会详细检查您的实际要求。

    【讨论】:

    • 移动节点的那一点是我之前没有想到的非常好的一点!它敲定了交易:)。非常感谢。
    【解决方案2】:

    前者。您不需要创建额外的属性,因为它已经为您存储在表示模型路径(实际上是键)的祖先链中。

    阅读此链接:https://developers.google.com/appengine/docs/python/datastore/entities#Python_Ancestor_paths

    标识实体的完整密钥由一系列种类标识符对组成,指定其祖先路径并以实体本身的路径终止:

    [Person:GreatGrandpa, Person:Grandpa, Person:Dad, Person:Me]
    

    要指定实体的父级,请使用模型的 parent 参数 创建子实体时的类构造函数。这个的价值 参数可以是父实体本身或其键;你可以得到 通过调用父实体的 key() 方法来获取密钥。

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      相关资源
      最近更新 更多