社交圈資料結構設計(redis實現)

來源:互聯網
上載者:User
1.player_simple_info pid pid|level|profile_url|name    ----------------hash      
2.player_detail_info: 12345 pid  12345 name kaka guild_id 123 visit_count  100000 gift_count 100 desc 最偉大的人      -----------------hash
3.player_friend_list: 12345 pid1 pid2 pid3   -------------------------- set
4.player_fan_list: 12345 pid1 pid2 pid3 ------------------------ set 
5.player_active_info  pid1 time1  pid2 time2 ----------------------- hash
4.msg_info:mid  12345|time|msg  ---------------------- string
5.msg_list: 12345 time1 mid1 time2 mid2        ------------------sorted set 拉取訊息時,可以分頁拉取,然後mget msg info。拉取到每條訊息的pid,然後hmget player simple info
6.feed_info:fid   12345|comment_count|like_count|content    --------------------string fid自增產生
7.feed_self_list: 12345 time1 fid1 time2 fid2  -------------sorted set 玩家自己發的feed需要push_back一個feed id,這個feed list作為拉模式產生feed_show_list
8.feed_show_list: 12345  10002  10002    10003  10003  -------------sorted set 拉取feed時,可以分頁, 先拉取到fid列表,然後mget feed_info
9.feed_like_list:fid  time pid     --------------sorted set zadd feed_like_list:fid  1422222222  12345, 增刪效率都比較高
10.feed_comment_list:fid   time1 cid1  time2 cid2 time3 cid3 -------------------------sorted set 可以分頁,mget  time是 1861920000除了最高位, 861920000 * 100, 如果對這個評論回複一條,就time11就是time1+1
11.feed_comment_info:cid  pid|time|for_fid/for_cid|target_id|content  -------string 評論要標識是對feed的評論還是回複評論,對訊息的評論也只是產生一個feed的評論,跟在之前的評論後面
sharding策略: 1.player_detail_info資料量最大,而且不會有mget操作,所以適合做sharding
2.player_simple_info在msg列表或者是feed列表都需要展示出來,所以會有大量的mget操作,如果做了sharding,一個玩家的好友或者被關注可能涉及到多個db的查詢操作,效率會降低;同時simple info的資料量很小,比較可控。
3.msg_id要通過自增產生,msg要設定到期時間,拉取msg_list只get一個月內的資料,對於之外的資料,可以在空閑時刪除;拉取時分頁拉取
4.feed_id要通過自增產生,feed也要設定到期時間,自己發的feed存在feed_self_list中,自己空間的最新feed要從feed_show_list拉取。 1)玩家A發一條feed,需要同時zadd feed_self_list:A和feed_show_list:A 2) 玩家發一條feed,拉取player_fan_list,從player_active_info中hmget各個玩家的活躍時間,去最近活躍的玩家(e.g.  12345),然後分別zadd fid到feed_show_list: 12345   --------推模式
5.查看玩家A的首頁feed資訊, 查看feed_show_list:A是否存在,如果存在直接分頁拉取,如果不存在,將收集每個好友(包括自己)的feed_self_list的前30條,然後push到feed_show_list中,設定feed_show_list的到期時間為1天,然後分頁拉取
6.定期清理曆史資料,比如沒有好友的玩家,msg_info和feed_info都要做expire,同時msg_list和feed_list都要刪除不需要的曆史資料
master有三個執行個體: 1.detail_info_db做sharding 2.simple_info不做sharding,可以做slave級聯 3.msg_feed不做sharding,可以做slave級聯
msg_feed的寫入在master,查詢可以在任意slave
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.