在app引擎上加入任何解决方案?

时间:2010-08-11 18:10:09

标签: java google-app-engine bigtable

我有以下数据模型:

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}。

1 个答案:

答案 0 :(得分:2)

对于少量数据,您可以按照您的建议行事。对于大量数据,即使您使用SQL数据库作为后端,也无法进行连接。

您的问题几乎是典型的社交网络数据问题。最有可能的情况是,您需要对数据进行非规范化,并在用户更新状态时将信息“推送”到所有用户的朋友列表,或者可能在上面执行时将其拉出来。最佳解决方案取决于数据的形状以及要优化的查询类型 - 检索或更新。

请参阅我的回答here了解更多信息,包括facebook工程师的帖子。