既然Google App Engine NDB有一个目录结构,那么走过这个结构以执行每个实体的深度优先遍历的最佳方法是什么。我希望使用 ndb 和 Python 编程语言按此顺序遍历实体。
1
/ |
2 8 9
/
3 7 10
/ | /
4 5 6 11 12
ndb没有目录结构。 您可以使用祖先键创建树结构,但是它将是固定的树,您不能移动元素,并且父项不必存在。 此外,可能有很多根。 以这种方式构建的树也将受到写入速度的限制,因为所有元素都属于单个实体组。 这有其积极和消极,具体取决于您在做什么。
如果你构建了这样的树,就没有获得直接子级的机制,所以你必须执行和祖先查询,并按键排序,这基本上会给你一个可以循环的实体的深度优先列表。 您可以在对象中存储其他属性,以允许您限制查询深度。
请参阅无种类的祖先查询 - https://developers.google.com/appengine/docs/python/datastore/queries#Python_Kindless_ancestor_queries 。 如果所有节点都是相同的种类,则可以对节点种类执行基本祖先查询。
您可以获取任何实体的直接父键(假设实体存在,您可以获取父级)。
我在CMS中实现了树,但是我不使用祖先密钥。每个父级都存储直接的子键(和名称),以便您可以显式遍历树并移动节点。