0

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

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

1 回答 1

2

ndb 没有目录结构。您可以使用祖先键创建树结构,但是它将是固定树,您不能移动元素,并且父母不必存在。此外,可能还有许多根。以这种方式构建的树也会受到写入速度的限制,因为所有元素都属于单个实体组。取决于你在做什么,它有积极的一面和消极的一面。

如果您像这样构造一棵树,则没有获取直接子代的机制,因此您必须执行祖先查询,并按键排序,这实际上会给您一个深度优先的实体列表,您可以循环访问。您可以在允许您限制查询深度的对象中存储其他属性。

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

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

我在 CMS 中实现树,但是我不使用祖先键。每个父节点都存储直接子节点的键(和名称),因此您可以显式地遍历树并移动节点。

于 2013-11-15T16:13:59.943 回答