2013-11-15 65 views
0

由於Google App Engine NDB具有目錄結構,因此執行此結構以執行每個實體的深度優先遍歷的最佳方式是什麼。我希望使用ndb和Python編程語言按照這個順序遍歷實體。walk ndb目錄結構

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

回答

2

ndb沒有目錄結構。您可以使用祖先鍵創建樹結構,但它將是一棵固定的樹,您不能移動元素,父母也不必存在。另外可能有很多根。以這種方式構建的樹也將受到寫入速度的限制,因爲所有元素都屬於單個實體組。根據你在做什麼,它有正面和負面的。

如果你像這樣構建一個樹,沒有任何機制來獲得直接的孩子,所以你將不得不執行和祖先查詢,並按鍵排序,這本質上會給你一個深度第一個你可以循環的實體列表。您可以在對象中存儲其他屬性,以便限制查詢深度。

查看無情的祖先查詢 - https://developers.google.com/appengine/docs/python/datastore/queries#Python_Kindless_ancestor_queries。如果所有節點都是相同的類型,那麼您可以爲節點Kind做一個基本的祖先查詢。

你可以得到任何實體的直接父鍵(假設實體存在,你可以得到父母)。

我在CMS中實現了樹,但是我沒有使用祖先的密鑰。每個父級存儲直接的兒童密鑰(和名稱),以便您可以明確地走樹並移動節點。

+0

該文檔顯示:「數據存儲中的實體因此形成類似於文件系統的分層目錄結構的分層鍵空間。」我從https://developers.google.com/appengine/docs/python/ndb/entities獲得了此信息。所以從文檔中的這個引用我想知道是否有可能走這個分層目錄結構。 – john

+0

注意文件說** **類似**不**是**。我也在我的回答中說你可以構建一棵樹。我的回答是,沒有辦法讓直系孩子。除非添加其他屬性,否則祖先查詢是獲取所有子項的唯一方法。 –