2011-07-15 16 views
0

我總是用Google App Engine來解決這個問題:我應該重複存儲在其他實體中的數據還是應該創建關聯?我應該分析什麼來做出這個決定?複製數據與Google App Engine上的多次搜索 - 設計決策

我不會在搜索中使用這些信息,所以它不是「GAE連接問題」,它是一個co $ t的問題。

現在,我有這樣的事情堅固例如:

public class GameResult 
{ 
    private int points; 
    private int duration; 
    ... 
} 

public class Player 
{ 
    private string name; 
    private GameResult lastGameResult; 

    List<int> lastGamesPoints; 
} 

不知怎的,我需要知道的最後5場比賽的標點,這就是我唯一需要的信息,那就是,我不需要了解關於過去遊戲的GameResult的其他內容。我可以有這個int列表,或者我可以有一個OneToMany GameResults關聯。

回答

0

這真的取決於你的實際使用和瓶頸。 如果你不需要修改這些數據,將它們複製到不同的實體將是一個好主意。特別是當你需要獲取這些「最後五個結果」(一個查詢與order_by)。如果使用一對多關係模型,那意味着您需要花費一些CPU小時來首先爲它們編制索引。那麼你需要支付額外的CPU小時查詢這些結果。我不認爲這是一個好主意。另一種方法是使用ListProperty來存儲最後五個GameResult實體。這意味着您可以使用它們的鍵來檢索這些實體,這將比查詢更快。

欲瞭解更多信息,有一些偉大的職位閱讀! Relational vs Non-Relational Data Modeling - what's the difference & How to think in data stores instead of databases?

+0

非常感謝你。我不需要修改這些數據。我的例子很不愉快:如果我告訴你我不想索引結果(order_by),你會在你的答案中改變什麼嗎?看到,在我的真實應用程序中,我有一個OneToMany與GameResult的關聯,這是不經常使用的。但是我也有一個OneToMany關聯,它具有始終使用的來自GameResult(points)的屬性。我在這裏複製數據,所以我不需要一直獲取GameResults列表。我現在檢查ListProperty和鏈接。 – Roberto

+1

基於你的解釋,既然你不需要修改這些數據,並且你總是需要最後五個分數,我會推薦你​​將分數直接存儲在Player實體中! – lucemia