我在嘗試解決規模問題時遇到了一個有趣的困境。與Redis在一起的新聞FeedStore Stratagy
目前我們有一個社交平臺,有一個非常典型的飼料。我們正在使用一個圖形數據庫,並且每次用戶請求一個數據源時,我們都會觸發該數據庫。雖然現在情況良好,但隨着我們用戶羣的增長,它會陷入停頓。進入Redis。
目前我們店的東西這樣的評論,喜歡和這樣在JSON編碼字符串個別Redis的鑰匙郵寄ID和更新他們的時候有更新,添加或刪除。然後在代碼中,我們遍歷帖子的數據庫結果並從Redis存儲區中提取數據。這導致多次調用Redis來構造每個帖子,這比每次觸摸DB要好得多。面臨的挑戰是跟上不斷變化的數據,例如評論員/ liker的頭像,屏幕名稱,已關閉的帳戶,新的喜歡,與每個帖子相關的新評論等。
我試圖決定一個策略來處理這個最有效的方法。由於我們將在每臺機器上安裝大約12吉米的RAM,因此Redis只會使我們走得如此之遠。
討論中的一個概念是爲每個存儲新帖子ID的用戶使用一個信標。因此,當用戶分享一些新內容時,他們所有連接好友的信標都會獲取帖子ID,以便當用戶登錄其供稿時被視爲需要更新的「骯髒」,然後將供稿按ID存儲在按時間戳排序的Redis集中。要檢索Feed數據,我們可以通過ID執行單個查詢,而不是完整的遍歷,速度提高數百倍。這仍然無法解決互動用戶的帳戶信息,他們的喜好以及不斷變化的評論問題,但解決了部分構建Feed問題的問題。
另一個想法是用戶的全部飼料原料(JSON編碼)存儲在MySQL記錄,當用戶請求和信標顯示了一個骯髒的飼料更新它的飛行。否則,它只是一個單一的選擇和JSON解碼來建立飼料。再次,動態組件是混雜。
有沒有人成功地處理過這個挑戰,或者有戰略的工作知識來解決這個問題。
對於你的問題沒有一個完整的答案,但是如果你已經使用過JSON數據,你有沒有看過[MongoDB](https://www.mongodb.org)?我已經使用了它多年,它的副本集和分片非常好地擴展。 Redis仍然是一個更快的單鍵查找時間,但mongo提供了靈活性來存儲整個JSON數據集 - 看起來像比將JSON數據存儲在MySQL記錄中更好的解決方案:) – solocommand
我也喜歡使用如上所述的MongoDB,如果您需要進一步擴展,Riak也可能是另一個使用選項,因爲它具有良好的外出鏈接。 – Daniel