我正在爲一個大型國際品牌設計g +應用程序。我需要創建的實體幾乎都是圖形的形式,因此有很多多對多關係(弧)連接可以在兩個方向上遍歷的節點。我正在線上閱讀所有可讀的文檔,但我還沒有發現任何特定於ndb設計最佳實踐和指南的內容。不幸的是我在nda之下,無法透露應用程序的細節,但它幾乎可以與科學會議的背景,論文,作者,論文和主題相匹配。appengine ndb上的圖形實體的最佳實踐
迄今設想的實體名單如下(與上下文轉移到匹配提到的主題):
- 組織(如ACM)
- 會議(如ACM多媒體)
- 會議的問題(例如, ACM多媒體13)
- 發佈會上軌(例如NoSQL的,機器學習,計算機視覺等)
- 作者(如我)
- 紙(例如「設計圖一樣分貝NDB」)
,你可以看到,我可以訪問並通過任一方向遍歷圖形(或面,從一個前端點):
- 筆者用合着者
- 筆者會議跟蹤
- 會議跟蹤對文件
- ...
等等,你填寫清單。
我想讓它變得平直和堅實,因爲它會用很多p.r.並且需要在內容和用戶數量方面不斷加班加點。我想從頭開始對它進行編碼,因此設計了我自己的模型,restful api讀/寫這些數據,避免使用非rel django並將表示層保持爲最小模板機制。我需要與公司在哪裏工作,但我們可能能夠用一個體面的開源許可證(理想情況下,ndb模型的一個寧靜的服務)發佈部分代碼。
如果任何人都可以指引我走向正確的方向,那就太棒了。
謝謝! 托馬斯
[編輯:涉及到許多一對多的關係,糾正錯字]
哎dragonx,感謝您抽出時間來回答,但我不知道這能解決我的問題。我認爲「referenceProperty」是指一種key =「其他實體之一」的keyProperty,對吧?我讀過這個可以輕鬆達到1mb的限制,當獲取具有很多連接的實體時,這可能是我的情況。我可能會爲簡單的相關實體使用重複的屬性,但我認爲整個數據結構可能需要依賴更「正常」的表示,因此我將弧作爲實體存儲的誘惑。說得通? – gru
你是對的,KeyProperty。正如我所提到的,如果您使用方法1,您將遇到1MB的限制,但如果使用方法2則不會。我不知道「規範化」表示的含義。通過將弧存儲爲實體也不太明白你的意思。如果你的意思是你想爲圖中兩個節點之間的每個鏈接創建一個實體,那絕對是錯誤的做法。這將是昂貴的,慢取得實體。在App Engine中,如果可能的話,您通常需要進行非規範化處理,以減少您獲取的實體數量,從而節省成本並提高性能。 – dragonx
uhm,我明白你的意思,但我將方法2簡單地看作方法1的鏡像版本(在我的情況下,所有實體A,B,C ...都可以與其他所有實體建立多對多的連接)所以我會再次遇到1mb的限制。有一個官方的googleplus演示應用程序,它使用我提到的存儲實體間連接的方法,[你可以在這裏看到它。](https:// github。com/googleplus/gplus-photohunt-server-python/blob/master/model.py#L122)他們不能完全錯誤,他們必須? – gru