走ndb目录结构

时间:2013-11-15 15:37:57

标签: python google-app-engine traversal directory-walk

由于Google App Engine NDB具有目录结构,因此走这个结构以执行每个实体的深度优先遍历的最佳方法是什么。我希望使用ndb和Python编程语言以这个顺序遍历实体。

            1
          / | \
         2  8  9
        / \     \
       3   7    10
     / | \      / \
    4  5  6    11 12

1 个答案:

答案 0 :(得分:2)

ndb没有目录结构。您可以使用祖先键创建树结构,但它可以是固定树,您不能移动元素,父母不必存在。此外,可能有很多根源。以这种方式构建的树也将受到写入速度的限制,因为所有元素都属于单个实体组。根据你正在做的事情,其正面和负面都有。

如果您构建了这样的树,则没有机制可以获得直接子项,因此您必须执行和祖先查询,并按键排序,这实际上会为您提供深度优先的实体列表,您可以循环。您可以在对象中存储其他属性,以允许您限制查询深度。

查看无用的祖先查询 - https://developers.google.com/appengine/docs/python/datastore/queries#Python_Kindless_ancestor_queries。如果所有节点都是相同的Kind,那么您可以对节点Kind进行基本的祖先查询。

您可以获取任何实体的直接父键(假设实体存在,您可以获得父级)。

我在CMS中实现了树,但是我没有使用祖先密钥。每个父项都存储直接子项的键(和名称),以便您可以明确地遍历树并移动节点。