2014-01-27 38 views
2

我目前正在開發一個Google AppEngine(GAE)應用程序,並且我正在爲GAE DataStore最佳實踐苦苦掙扎。我想以最有效的方式使用DataStore。我使用Objectify框架,但如果有更好的選擇,我可以靈活地使用其他東西。高效使用GAE DataStore

我的應用程序使用了三個對象/表: - 物品(ID,描述) - 列表(ID,listId,listDescription - SecurityProfile(ID,listId,用戶名,存取類型)

我一個關係世界,我的項目和SecurityProfiles表將有一個外鍵,將它們鏈接到一個列表(ListId),然後我會在我的查詢中使用聯接。

我需要做的典型查詢: - 獲取特定查詢用戶(需要「用戶名」上的索引以按用戶名進行過濾,並需要從List表中獲取說明) - 獲取特定用戶列表中的所有項目(獲取項目鏈接到上述查詢中檢索的列表)

我很努力想出一種方法來以有效的方式鏈接不同的對象(最小化DataStore查詢和索引)。

我在其他文章中看到,應該避免連接,並且我應該儘可能地對模型進行去歸一化。

這麼樣的創建一個對象只: - 數據(ID,描述,listId,listDescription,用戶名,存取類型)

我可以看到如何從一個讀取點的工作,但如果我更新listDescription,一個accessType或添加一個新的用戶名,我可能不得不更新大量的記錄。這真的是要走的路嗎?

+0

[GAE:如何有效地將面向對象的設計映射到Appengine數據存儲中](http:// stackoverflow。com/questions/9278805/gae-how-to-map-object-oriented-designs-into-appengine-datastore-efficient) –

回答

1

我只熟悉Python NDB API,但是在Java中情況相似。

Python NDB,我會建議爲每個

  • 用戶模型,
  • 名單,
  • 列表項

然後,您可以用repeated引用它們KeyProperties,例如

這樣,就可以從數據庫中拉了用戶的個人資料,並存儲在accessibleLists鍵,你可以得到列表訪問用戶。

或者,你可以做它周圍的其他方法:

class List(ndb.Model): 
    usersWithAccess = ndb.KeyProperty(repeated=true) 

,然後你可以立即查詢是給定的用戶訪問列表。

+1

由於他將它標記爲'objectify',所以我添加了該標籤。 – Lipis

+0

謝謝爲例。 Java中有沒有類似的東西(最好在Objectify中)? – user652341

+0

我相信底層數據存儲是相同的,不管你使用什麼API。所以Java應該有類似的功能。但是我還沒有在GAE上使用過Java。 – pfalke

相關問題