【问题标题】:Best Way to Implement a Feed with ROR?使用 ROR 实现 Feed 的最佳方式?
【发布时间】:2014-10-08 00:22:25
【问题描述】:
我正在开发一个位于 Rails 之上的 iOS 应用程序,其中包含一个追随者/追随者范式。我想实现一个新闻提要,按用户关注的人按时间顺序显示所有帖子。
据我所知,有两种方法可以实现:
- 在加载用户的新闻提要时,在数据库中查询用户关注的用户的帖子,并将它们放入帖子数组中以返回到应用程序。 (Mike Hartl 的书中使用的技术 - https://www.railstutorial.org/book)
- 使用 Redis 之类的服务基本上可以为每个用户提供一个供稿,然后将用户的帖子发布到他的每个关注者的供稿中。
根据我所读/听的内容,第二种解决方案似乎可以更好地扩展并且很有意义,但我不愿意深入研究它,除非它真的会产生巨大的影响。由于 Hartle 在他的书中使用了方法 1,也许 Rails 优化了这样的流程,所以它不会。
接下来我应该选择哪个?
【问题讨论】:
标签:
ruby-on-rails
redis
feed
【解决方案1】:
Chase 描述了 1),所以我将描述 2)。
我建议您阅读 Redis in Action 一书,因为其中有一个完整示例说明了如何在 redis 中实现小型社交网络(使用 API、结构等)。是redis和社交网络的精彩介绍,走redis路线应该是你的起点http://www.manning.com/carlson/excerpt_contents.html
Redis 始终位于 RAM 中,因此它会非常响应您所做的任何查询。使用排序集,redis 可以通过非常快速的读写来产生出色的排名!所以是的,它会扩展得更好。但它是一个需要掌握的全新作品,一个需要管理的新服务器,一种带有 LUA 脚本的新语言,等等......
这取决于你的目标。如果你的目标是有很多用户,很多排名,并且仍然有很好的性能,那么使用 redis 绝对是一个不错的选择。
恕我直言,如果您已经知道您将不得不扩展,那么从您在 1 中所说的开始是肮脏的。这就像用不同的技术做两次同样的事情,浪费劳动力来进行更好的短期调度。
【解决方案2】:
从解决方案 1 开始,因为一开始实施和维护会容易得多。担心随着应用程序的扩展而扩展,Puma 或 Unicorn 上的默认 Rails 可以处理大约 2000 到 2500 个并发请求,这对于小型应用程序来说有点多。
我建议创建一个返回 json 的 api(控制器)。当 iOS 应用程序使用用户密钥和 id 调用 api 时,从数据库中获取帖子列表并按日期排序。在这里处理 nils 时要小心,因为这可能会导致日期排序崩溃。然后将该列表序列化为 json 并将其发送到您的 iOS 应用程序。
如果您是 Rails 新手,使用 Redis 可能会很麻烦,但如果运气好的话,您很快就会到达那里。