2014-10-08 110 views
0

我正在使用包含追随者/遵循范例的rails之上的iOS应用程序。我想要实现一个显示所有帖子的新闻源,按照时间顺序排列,用户正在关注的人。用ROR实现Feed的最佳方法?

据我所知,有实现这个方法有两种:

  1. 当加载用户的新闻提要,由用户查询数据库上岗用户如下,并且把它们放在一个帖子数组返回到应用程序。 (在Mike Hartl的书 - https://www.railstutorial.org/book中使用的技术)
  2. 使用像Redis这样的服务来为每个用户提供一个订阅源,然后将用户的帖子发布到他的每个关注者的订阅源。

从我读到的/听到的,第二个解决方案似乎可以更好地扩展并且有很多意义,但是我不愿意潜入它,除非它真的会产生巨大的差异。由于Hartle在他的书中使用了方法1,因此Rails可能会优化这样的过程,所以它不会。

我应该选择哪一种?

回答

1

从解决方案1开始,因为它首先会更容易实施和维护。担心扩展应用程序默认情况下,Puma或Unicorn上的Rails可以处理大约2000到2500个并发请求,这对于小型应用程序来说非常有用。

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

如果您是Rails的新手,Redis可以通过讨厌的方式与您一起工作,但只要运气好,您很快就能到达那里。

2

那么Chase描述了1),所以我会描述2)。

我建议你看看Redis in Action这本书,因为这里有一个完整的例子,说明如何在redis中实现小型社交网络(使用API​​,结构等)。这是对redis和社交网络的精彩介绍,如果您使用redis路由,它应该是您的出发点http://www.manning.com/carlson/excerpt_contents.html

Redis总是在RAM中,因此它对任何查询都会非常敏感。通过有序集合,redis的构建是通过非常快速的读取和写入来创建出色的排名!所以是的,它会更好地扩展。但它是一个全新的掌握,一个新的服务器管理,一个新的语言与LUA脚本等...

这将取决于你的目标。如果您的目标是拥有许多用户,许多排名,并且仍然具有良好的性能,那么使用redis绝对是一个不错的选择。

恕我直言,从你说的1中开始是脏的,如果你已经知道你将不得不扩展。这就像用不同的技术做两次一样的事情,浪费劳动力来进行更好的短期调度。