2014-10-08 112 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中開始是髒的,如果你已經知道你將不得不擴展。這就像用不同的技術做兩次一樣的事情,浪費勞動力來進行更好的短期調度。