我正在尝试创建类似Twitter的关注者系统(用户可以互相关注)。我对存储关注者关系的好方法感到困惑。我正在使用JDO(在谷歌应用引擎上)。
首先要想到的是为追随者和你追随的人保留一套。类似的东西:
class User {
private String mUsername;
private Set<String> mFollowers;
private Set<String> mFollowees;
}
我很担心当这些集合增长到10,000多个条目时会发生什么。查看用户的页面将是一个常见的操作,我不想每次我的API需要生成用户信息时都必须加载整个集合。无论如何,我一次只会显示50个粉丝,所以加载整个Set是没有意义的。
替代方法可能是使用中间类来存储关系,这样它们就不会绑定到User对象。然后,分页也应该很容易(我认为)。例如,每当我想关注用户时,我都会创建一个这个对象的实例:
class RelationshipInfo {
private String mMyUsername;
private String mUsernameYouAreFollowing;
}
因此,当我查看用户的页面时,我可以根据用户的ID查询上面的前50个这样的记录。这是否具有任何性能感?我不确定这是否比上面的第一个选项更好。这种方式需要更多访问数据存储区。
任何想法都会很棒,
由于
答案 0 :(得分:5)
去年的谷歌I / O的Brett Slatkin的Building Scalable, Complex Apps on App Engine讲话实际上使用类似Twitter的应用程序作为例子。即使除此之外,这是一个很棒的演讲,即使它与你提出的问题无关,我也强烈推荐它。
此外,您可能需要查看Jaiku,这是一个基于App Engine的类似开源Twitter的应用程序。