我正在开发的应用有一个活动源,每个用户都可以看到他们朋友的活动(类似于Facebook)。我正在寻找一种适度可扩展的方法,以便即时显示给定用户的活动流。我说“适度可扩展”是因为我想仅使用数据库(Postgresql)和可能的 memcached来完成此操作。例如,我希望这个解决方案可以扩展到每个拥有100个好友的200k个用户。
目前,有一个主活动表,存储给定活动的呈现html(Jim添加了一个朋友,George安装了一个应用程序等)。该主活动表保留源用户、html和时间戳。
然后,有一个单独的(“连接”)表,简单地保留指向应在其好友源中查看此活动的人以及对主活动表中对象的指针。
因此,如果我有100个朋友,并且我进行3项活动,则加入表将增长到300个项目。
显然,这张表会迅速增长。不过,它具有良好的特性,即获取要向用户显示的活动只需要进行单个(相对)廉价的查询。
另一种选择是仅保留主要活动表,并通过类似于以下内容的查询来查询它:
我看到双方的利弊,但我想知道一些SO的人是否可以帮助我权衡一下选择,并建议一种方式。我也愿意接受其他解决方案,尽管我想保持简单,不安装像CouchDB之类的东西。
非常感谢!
目前,有一个主活动表,存储给定活动的呈现html(Jim添加了一个朋友,George安装了一个应用程序等)。该主活动表保留源用户、html和时间戳。
然后,有一个单独的(“连接”)表,简单地保留指向应在其好友源中查看此活动的人以及对主活动表中对象的指针。
因此,如果我有100个朋友,并且我进行3项活动,则加入表将增长到300个项目。
显然,这张表会迅速增长。不过,它具有良好的特性,即获取要向用户显示的活动只需要进行单个(相对)廉价的查询。
另一种选择是仅保留主要活动表,并通过类似于以下内容的查询来查询它:
select * from activity where source_user in (1, 2, 44, 2423, ... my friend list)
这种方法的缺点是你查询了可能永远不会活跃的用户,随着朋友列表的增长,这个查询会变得越来越慢。我看到双方的利弊,但我想知道一些SO的人是否可以帮助我权衡一下选择,并建议一种方式。我也愿意接受其他解决方案,尽管我想保持简单,不安装像CouchDB之类的东西。
非常感谢!