淺談留言蓋樓設計

一、寫在前面

最近在寫博客的留言功能,由此引發的思考,留言一般分為簡單留言和蓋樓留言

簡單留言:一問一答,對于沒有大量用戶評論或者評論不是核心功能的app來說就夠用了。

11

蓋樓留言:有著大量的用戶評論,那么設計“蓋樓”的效果還是可取的,這樣能幫助用戶找到該條評論或者回復的上下文情景。但是根據“蓋樓”的顯示效果不同,設計上也是有很大的差別的。

22

如何設計一個簡潔優雅的蓋樓留言呢?下面讓我們帶著這個問題進入今天的課題

二、蓋樓設計

數據庫結構模型如下:

create table ArticleComment(

@ID int, –標識列

@PID int, –回復ID

@ArticleID int, –文章ID

@Content ntext, –內容

@IP nvarchar(50), –IP

@AddDate DateTime –留言時間

)

方法一:

復制前面回復,附加上新的,一同放入 Content 中。Content 要足夠大,足以放下所有的樓層。

1542187619(1)

這樣做有兩個缺點:

1. 占用空間大

2. 前面的回復后修改后,后面的不好更新

方法二:

遞歸,需要程序查詢所需和前端做必要的處理合并就可以達到效果。這里又引出另外一個問題“當留言回復的層數過多的時候,比如1萬條蓋樓,會極大拖慢系統的加載時間。”

一種解決方案:

1.文章留言分頁加載

44

2.每個父ID下面只能掛在留言級數需要控制,多余的下一頁顯示。頁面由用戶觸發

33

 

三、蓋樓總結

上面只是簡單列舉目前市面的上幾種留言實現方式,如果你的系統每天都會有成千上萬條評論,那么單表的設計肯定是不行,優化的方式也有很多。

  • 分庫分表。分庫分表是最為常用也最有效的優化方式,建議按照主題來分庫分表。這樣同一個主題下面的評論就會落到同一張表里,避免了跨表查詢。
  • 適當的數據冗余。如果你需要顯示評論人的相關信息,那么在插入評論時就把這些信息寫入評論表中,避免多次查詢。實際上,如果是紀錄數據,都可以冗余對應的數據信息,因為它們的數據的實時行和一致性要求并不高,用戶不會因為評論中的頭像沒更新而撕了你,哈哈。
  • 如果pd要求你能給評論點贊,得注意點贊冪等性,同一個用戶只能點一次贊或者取消自己的點贊。因為從冪等性的要求來說,每個贊都是一條記錄。評論的贊數如果都從點贊表中統計得出,那么性能開銷會十分巨大,而且點贊如此輕量級的一個操作一定會加劇點贊表的競爭操作。所以建議直接在評論表中添加一個like_count的計數器,維護該冗余該字段。減輕服務器聚合數據的壓力,熱門評論加緩存。類似于網易新聞的熱門評論,讀取頻度非常高,可以專門開接口給客戶端,同時該接口做緩存。
本站部分文章源于互聯網,本著傳播知識、有益學習和研究的目的進行的轉載,為網友免費提供。如有著作權人或出版方提出異議,本站將立即刪除。如果您對文章轉載有任何疑問請告之我們,以便我們及時糾正。

PS:推薦一個微信公眾號: askHarries 或者qq群:474807195,里面會分享一些資深架構師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

轉載請注明原文出處:Harries Blog? » 淺談留言蓋樓設計

贊 (0)
分享到:更多 ()

評論 0

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
2013平特肖公式