使用ROR实施Feed的最佳方法是什么?

时间:2014-10-08 00:22:26

标签: ruby-on-rails redis news-feed

我正在使用包含关注者/关注范例的rails之上的iOS应用程序。我想实现一个新闻源,显示所有帖子,按时间顺序排序,由用户关注的人。

据我所知,有两种方法可以实现这一点:

  1. 加载用户的新闻源时,查询用户关注的用户发布的帖子,并将其放入帖子数组中以返回应用程序。 (Mike Hartl的书中使用的技术 - https://www.railstutorial.org/book
  2. 使用像Redis这样的服务基本上为每个用户提供一个Feed,然后将用户的帖子发布到他的每个关注者的Feed中。
  3. 从我所阅读/听到的内容来看,第二种解决方案似乎更好地扩展并且很有意义,但是我不愿意深入研究它,除非它真的要做到巨大的差异。由于Hartle在他的书中使用方法1,也许Rails优化了这样的过程,所以它没有。

    前进哪个我应该选择?

2 个答案:

答案 0 :(得分:3)

Chase描述了1),所以我将描述2)。

我建议你看看Redis in Action这本书,因为有一个关于如何在redis中实现小型社交网络的完整示例(包括API,结构等)。这是redis和社交网络的精彩介绍,如果你走redis路线{@ 3}}

它应该是你的起点

Redis始终在RAM中,因此它会对您执行的任何查询都非常敏感。使用有序集合,redis可以通过非常快速的读写来产生出色的排名!所以是的,它会扩展得更好。但它是一个全新的主要部分,一个新的管理服务器,一个LUA脚本的新语言等...

这取决于您的目标。如果你的目标是拥有很多用户,很多排名,并且仍然有很好的表现,使用redis绝对是一个很好的选择。

恕我直言,如果您已经知道必须进行扩展,那么从您在1中所说的开始是很脏的。这就像用不同的技术做两次同样的事情,浪费劳动力以获得更好的短期安排。

答案 1 :(得分:2)

从解决方案1开始,因为它最初将更容易实现和维护。随着您在Puma或Unicorn上增加应用程序默认Rails所需的扩展,可以处理大约2000到2500个并发请求,这对于小型应用程序来说非常有用。

我建议创建一个返回json的api(控制器)。当iOS应用程序使用用户密钥和id调用api时,从数据库中获取帖子列表并按日期排序。小心处理这里的nils,因为这可能会导致日期排序中的恶意崩溃。然后将该列表序列化为json并将其发送到您的iOS应用程序。

如果你是Rails的新手,Redis可以讨厌合作,但运气好的话,你很快就会到达那里。