2010-08-11 88 views
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 } 

,所以如果我是用户 '约翰',我的朋友们:{恬, 玛丽 }。 如果我使用stadiumname ='abc'来运行体育场查询,我应该返回{tim}。

+0

您是否允许更改数据建模? – 2010-08-11 18:23:15

+0

'username = friend.getUsername();'< - 不应该是'username = friend.getFriendName();',因为'friend.getUserName()'将永远是“我”,因为'friend'是一个元素你之前通过用'username =“me”'过滤选择的'friends'? – 2010-08-11 18:28:54

+0

@爱德华:是的,我可以改变建模,我试图找出是否有任何可能的方式来做到这一点,可以任何方式。 – user246114 2010-08-11 18:34:52

回答

2

对于少量的数据,你可以做你的建议。对于大量数据,即使您为后端使用SQL数据库,您也不会进行连接。

你的问题几乎是典型的社交网络数据问题。最有可能的是,您需要对数据进行非规范化处理,并在用户的朋友列表更新其状态时将其“推送”给所有用户的朋友列表,或者按照上述操作将其拉出。最好的解决方案取决于数据的形状以及要优化的查询类型 - 检索或更新。

查看我的回答here了解更多信息,其中包括facebook工程师发布的信息。

相关问题