0

Google App Engine NDB にはディレクトリ構造があるため、この構造をたどって各エンティティの深さ優先走査を実行する最善の方法は何ですか。ndb と Python プログラミング言語を使用して、エンティティをこの順序でトラバースしたいと考えています。

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

1 に答える 1

2

ndb にはディレクトリ構造がありません。先祖キーを使用してツリー構造を作成できますが、それは固定ツリーであり、要素を移動することはできず、親が存在する必要はありません。さらに、多くの根が存在する場合があります。この方法で構築されたツリーは、すべての要素が 1 つのエンティティ グループに属するため、書き込み速度によっても制限されます。あなたが何をしているかに応じて、プラスとマイナスがあります。

このようにツリーを構築した場合、直接の子を取得するメカニズムがないため、祖先クエリを実行し、キーで並べ替える必要があります。これにより、基本的にループできるエンティティの深さ優先リストが得られます。オブジェクトに追加のプロパティを格納して、クエリの深さを制限できます。

種類のない祖先クエリを参照してください - https://developers.google.com/appengine/docs/python/datastore/queries#Python_Kindless_ancestor_queries 。すべてのノードが同じ種類の場合、ノードの種類に対して基本的な祖先クエリを実行できます。

任意のエンティティの直接の親キーを取得できます (エンティティが存在すると仮定すると、親を取得できます)。

ツリーを CMS に実装していますが、祖先キーは使用していません。各親は直接の子のキー (および名前) を格納するため、ツリーを明示的にウォークし、ノードを移動できます。

于 2013-11-15T16:13:59.943 に答える