2

次のデータモデルがあります。

class StadiumOccupant {
  String stadiumname;
  String username;
}

class Friend {
  String username;
  String friendname;
}

スタジアムで友達でもあるすべてのユーザーを見つけたいです。私はこのようにすることができます:

List<String> friendsAtStadium;
String stadiumId = 'xyz';

List<Friend> friends = select from Friend where username = 'me';
for (Friend friend : friends) {
  List<StadiumOccupant> friendAtStadium = 
    select from StadiumOccupant where 
    stadiumname = stadiumId and
    username = friend.friendname;
  friendsAtStadium.addAll(friendAtStadium);
}

これは、非常に少数のオブジェクトで機能します。ユーザーが一握り以上の友達を持つとすぐに、これは機能しません。アプリエンジンでこれに対する解決策はありますか? 性能の良いものは思いつきません。

ありがとう

-------- いくつかのサンプルデータ --------

Friend { john, tim }
Friend { john, mary }
Friend { mary, frank }

StadiumOccupant { abc, tim }
StadiumOccupant { abc, frank }
StadiumOccupant { abc, kim }

もし私がユーザー「john」なら、私の友達は { tim, mary } です。Stadiumname='abc' を指定してスタジアム クエリを実行すると、{ tim } が返されるはずです。

4

1 に答える 1

2

少量のデータについては、提案したことを実行できます。大量のデータの場合、バックエンドにSQLデータベースを使用している場合でも、とにかく結合を実行しません。

あなたの問題は、ほとんど典型的なソーシャルネットワーキングデータの問題です。ほとんどの場合、データを非正規化し、ユーザーがステータスを更新するたびに情報をすべてのユーザーの友達リストに「プッシュ」するか、上記のようにプルします。最適なソリューションは、データの形状と、最適化するクエリの種類(取得または更新)によって異なります。

Facebookエンジニアによる投稿など、詳細については、ここで私の回答を参照してください。

于 2010-08-11T19:54:44.730 に答える