我試圖在NDB中存儲層次結構,我很困惑如果在構建新實體的鍵時只應使用「父」參數,還是應該在其中包含一個額外的屬性我的模型來保存父鍵?Google App Engine中的層次結構NDB
3
A
回答
5
如果您在密鑰中使用祖先,您將創建一個大的實體組(假設樹根/層次結構爲單根),實際上可能不是您想要的寫入性能角度。另外,深層次結構可能意味着非常大的密鑰。
如果要使用祖先鍵移動節點,必須刪除並重新創建鍵的整個子層次結構,其中在父節點中存儲父節點(或父節點中的子鍵)意味着只需存儲不同的屬性中的鍵。
如果您通常走下層次結構(比如說遍歷URL),您可能會發現將子項密鑰存儲在父項的列表中會更有效率,假設每個級別都不會有太多的直接子項作爲將父密鑰存儲在孩子中。
我會在決定走哪條路之前詳細檢查您的實際需求。
1
前者。您不需要創建額外的屬性,因爲它已經存儲在代表模型路徑(真的關鍵)的祖先鏈中。
閱讀此鏈接:https://developers.google.com/appengine/docs/python/datastore/entities#Python_Ancestor_paths
完整鍵識別所述實體由種類標識符對指定其祖先路徑和與這些實體本身的終止序列的:
[Person:GreatGrandpa, Person:Grandpa, Person:Dad, Person:Me]
要指定實體的父級,請在創建子實體時使用類構造函數的父參數。這個參數的值可以是父實體本身或其關鍵字;您可以通過調用父實體的key()方法來獲取密鑰 。
相關問題
- 1. Google App Engine - NDB - INDEX Quesions
- 2. Google App Engine NDB post_create掛鉤
- 3. 使用_post_put_hooks在Google App Engine的ndb
- 4. Google App Engine的服務層
- 5. Google App Engine ndb memcache何時使用memcache
- 6. 使用Google App Engine NDB和Fixture(s)
- 7. Google App Engine NDB自定義密鑰ID
- 8. Google App Engine NDB keyproperty計數器
- 9. App Engine ndb StructuredProperty __get__
- 10. 使用Google App Engine NDB的Odoo |從postgresql移植到NDB
- 11. Google App Engine兼容層
- 12. Google App Engine Warfile目錄結構
- 13. App Engine NDB替代db.StringListProperty
- 14. 在Google App Engine中設置NDB中的實體密鑰
- 15. 如何測試App Engine NDB中的DateTimeProperty?
- 16. 確定ndb PolyModel Google App Engine中的對象類
- 17. 從Google App Engine中刪除大量實體NDB
- 18. 在Google App Engine中多次寫入
- 19. Google App Engine中的Twitter-ish數據庫結構
- 20. 使用Google App Engine的NDB創建異步方法
- 21. Google App Engine - NDB - 反轉IN的最佳方式(列表)
- 22. 許多地方的Google App Engine NDB查詢
- 23. Google App Engine NDB數據存儲的簡單說明
- 24. PHP類層次結構 - 層次結構中的最高類
- 25. App Engine的BadValueError節省NDB LocalStructured實體
- 26. App Engine的NDB並行通過關鍵
- 27. 層次結構
- 28. Go App Engine項目的包裝結構
- 29. 在Google App Engine中一次抓取100個結果
- 30. 圖中的層次結構
移動節點周圍的點是我以前沒有想到的一個很好的點!並且它達成了協議:)。非常感謝。 – 0xcurb