2011-07-15 1 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のリストを持つことができましたか、GameResultsのOneToMany関連を持つことができました。

答えて

0

実際の使用状況とボトルネックによって大きく変わります。 これらのデータを変更する必要がない場合は、それらを異なるエンティティに複製することをお勧めします。特に、これらの「最後の5つの結果」(order_byを使用したクエリ)を取得する必要があります。 1対多のリレーションモデルを使用する場合は、最初にインデックスを作成するためにCPU時間を要します。次に、これらの結果を照会するために余分なCPU時間を費やす必要があります。私はそれが良い考えだとは思わない。これを行う別の方法は、最後の5つのGameResultエンティティを格納するListPropertyを使用することです。クエリーよりも速いキーでこれらのエンティティを取得できることを意味します。

詳細については、いくつかの素晴らしい記事があります。 Relational vs Non-Relational Data Modeling - what's the difference & How to think in data stores instead of databases?

+0

ありがとうございました。これらのデータを変更する必要はありません。私の例は不幸です:私は結果を索引付けしたくないと言うならば、答えの中で何かを変えてくれますか(order_by)?実際のアプリケーションでは、よく使われないGameResultとOneToManyの関連があります。しかし、私はまた、常に使用されているGameResult(ポイント)の属性を持つOneToMany関連を持っています。ここではデータを複製していますので、常にGameResultsのリストを取得する必要はありません。 ListPropertyとリンクをチェックします。 – Roberto

+1

あなたの説明は、これらのデータを変更する必要はなく、最後の5つのスコアが常に必要なので、スコアをPlayerエンティティに直接保存することをお勧めします。 – lucemia

関連する問題