2014-10-30 45 views
0

我已經閱讀了一些關於Google數據存儲中多對多關係的問題和文章,但我仍然不確定哪種方法是最有效的方式:I有User參考N CollectionOfThings。 A CollectionOfThings可以引用M個用戶。 M和N都非常小。我除了不多於5(我的申請的性質)。幾乎在每個請求中都提取用戶對象。另一個對象不是。我需要從CollectionOfThings的實例中查詢所有用戶以及來自用戶的所有實例的CollectionOfThing實例。從GAE數據存儲中讀取多對多對象的最有效方法

所以我看到可能的實現:

  • CollectionOfThings有用戶的列表。 User有一個CollectionOfThings的集合。關係的兩端不用@Load註釋。如果我需要一個relatin零件的對象,我使用ofy()。load()。keys();我使用一個關係對象,我可以查詢ofy().... filter(「user」,...),反之亦然。

現在最大的問題是:從數據存儲讀取操作角度來看,最有效的方法是什麼?

回答

1

從最簡單/最簡單的方法開始,您可以隨時遷移。從你所描述的,我會開始Set<Ref>領域指向兩個方向。您可以使用@Load組,以便默認情況下不會發生負載,但您仍然可以使用該設施。 確保更新交易中關係的兩端。

另一種選擇,假定User < - >CollectionOfThings關係是對稱的雙向的,是隻保持在一側上設置鍵/參考文獻的和@index它。這具有的優點是您不需要交易就可以保持bidir關係的同步。它的缺點是你使用查詢來反向關係;這些查詢將最終一致;維護這些索引需要額外的費用。

相關問題