我有以下数据模型:
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);
}
这可以用于极少数的对象。一旦用户拥有多个朋友,这将无效。在app引擎上有这个解决方案吗?我想不出一个表现良好的人。
由于
--------一些样本数据--------
Friend { john, tim }
Friend { john, mary }
Friend { mary, frank }
StadiumOccupant { abc, tim }
StadiumOccupant { abc, frank }
StadiumOccupant { abc, kim }
所以如果我是用户'john',我的朋友是:{tim,mary}。 如果我用stadiumname ='abc'运行体育场查询,我应该回来{tim}。
答案 0 :(得分:2)
对于少量数据,您可以按照您的建议行事。对于大量数据,即使您使用SQL数据库作为后端,也无法进行连接。
您的问题几乎是典型的社交网络数据问题。最有可能的情况是,您需要对数据进行非规范化,并在用户更新状态时将信息“推送”到所有用户的朋友列表,或者可能在上面执行时将其拉出来。最佳解决方案取决于数据的形状以及要优化的查询类型 - 检索或更新。
请参阅我的回答here了解更多信息,包括facebook工程师的帖子。