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