考慮一下微信朋友圈的設(shè)計(jì)與實(shí)現(xiàn)

背景

由于最近的公司的項(xiàng)目有涉及到類(lèi)似的微信朋友圈的功能, 于是最近開(kāi)始研究數(shù)據(jù)庫(kù)層面的朋友圈的設(shè)計(jì)。

思考

  1. 訂閱與發(fā)布
  2. 分享與朋友圈
  3. 評(píng)論
  4. 朋友圈的時(shí)間軸

開(kāi)始

數(shù)據(jù)庫(kù)設(shè)計(jì)

用戶(hù)表 users

id
phone
email
password

關(guān)注表 subscriptions

id
user_id
subscriber_id

朋友圈 moments

id
user_id
content
images
sharing_id

分享 sharings

id
title
thumbnail
link

評(píng)論表 replies

id
user_id
moment_id
to_user
content

業(yè)務(wù)實(shí)現(xiàn)

  1. 朋友圈的時(shí)間軸
    根據(jù)登錄用戶(hù)查詢(xún)關(guān)注列表的 subscriber_id 的集合,根據(jù)集合使用 where in 查詢(xún)朋友圈,根據(jù)發(fā)布時(shí)間排序取分頁(yè)。
    給訂閱人數(shù)增加上線(xiàn),避免 where in 數(shù)據(jù)量過(guò)大,微信的朋友上線(xiàn)為1000
  2. 朋友圈的發(fā)布
    images 以 json 形式存儲(chǔ), {[id, path]},id 可以排序,最多是 9 張圖片,圖片不涉及到單獨(dú)查詢(xún),所以可以用 json。
  3. 分享
    朋友圈有分享也是朋友圈發(fā)布,但是要補(bǔ)充一部分?jǐn)?shù)據(jù):分享的標(biāo)題、鏈接、縮略圖。所以添加額外 sharings 表存儲(chǔ),評(píng)論就是朋友圈的 content 主題內(nèi)容,sharing_id 就是分享具體內(nèi)容。
  4. 評(píng)論
    記錄評(píng)論者,以及需要 @ 的人和具體內(nèi)容部分。

效率考慮

  1. 使用 redis(或其他緩存) 做朋友圈時(shí)間軸的緩存,但要記住用戶(hù)刪除、發(fā)布朋友圈時(shí)的更新和刪除
  • 可以使用 LIST 和 HASH,LIST鍵:list:{$user_id} => [moment_id, ...],HASH鍵:hash:moment:{$id} => 朋友圈數(shù)據(jù)表一行數(shù)據(jù)
  1. 使用 redis 做關(guān)注表緩存
  • 可以使用 LIST ,LIST 鍵:list:{$user_id} => [subscriber_id, ...]
  1. 使用 redis 做評(píng)論表緩存
  • 可以使用 LIST 和 HASH;LIST 鍵:list:{$moment_id} => [reply_id, ...],HASH鍵:hash:reply:{$id} => 評(píng)論表一行數(shù)據(jù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容