MongoDB資料建模小案例:朋友圈評論內容管理
需求
社交類的APP需求,一般都會引入“朋友圈”功能,這個產品特性有一個非常重要的功能就是評論體系。
先整理下需求:
-
這個APP希望點贊和評論資訊都要包含頭像資訊:
- 點贊列表,點贊使用者的暱稱,頭像;
- 評論列表,評論使用者的暱稱,頭像;
-
資料查詢則相對簡單:
- 根據分享ID,批量的查詢出10條分享裡的所有評論內容;
建模
不好的
跟據上面的內容,先來一個非常非常”樸素”的設計:
{
"_id": 41,
"username": "小白",
"uid": "100000",
"headurl": "http://xxx.yyy.cnd.com/123456ABCDE",
"praise_list": [
"100010",
"100011",
"100012"
],
"praise_ref_obj": {
"100010": {
"username": "小一",
"headurl": "http://xxx.yyy.cnd.com/8087041AAA",
"uid": "100010"
},
"100011": {
"username": "mayun",
"headurl": "http://xxx.yyy.cnd.com/8087041AAB",
"uid": "100011"
},
"100012": {
"username": "penglei",
"headurl": "http://xxx.yyy.cnd.com/809999041AAA",
"uid": "100012"
}
},
"comment_list": [
"100013",
"100014"
],
"comment_ref_obj": {
"100013": {
"username": "小二",
"headurl": "http://xxx.yyy.cnd.com/80232041AAA",
"uid": "100013",
"msg": "good"
},
"100014": {
"username": "小三",
"headurl": "http://xxx.yyy.cnd.com/11117041AAB",
"uid": "100014",
"msg": "bad"
}
}
}
可以看到,comment_ref_obj
與praise_ref_obj
兩個欄位,有非常重的關係型資料庫痕跡,猜測,這個系統之前應該是放在了普通的關係型資料庫上,或者設計者被關係型資料庫的影響較深。而在MongoDB這種文件型資料庫裡,實際上是沒有必要這樣去設計,這種建模只造成了多於的資料冗餘。
另外一個問題是,url佔用了非常多的資訊空間,這點在壓測的時候會有體現,頻寬會過早的成為瓶頸。同樣username資訊也是如此,此類資訊相對來說是全域性穩定的,基本不會做變化。並且這類資訊跟隨評論一起在整個APP中流轉,也無法結局”使用者名稱修改“的需求。
根據這幾個問題,重新做了優化的設計建議。
推薦的設計
{
"_id": 41,
"uid": "100000",
"praise_uid_list": [
"100010",
"100011",
"100012"
],
"comment_msg_list": [
{
"100013": "good"
},
{
"100014": "bad"
}
]
}
對比可以看到,整個結構要小了幾個數量級,並且可以發現url,usrname資訊都全部不見了。那這樣的需求應該如何去實現呢?
從業務抽象上來說,url,username這類資訊實際上是非常穩定的,不會發生特別大的頻繁變化。並且這兩類資訊實際上都應該是跟uid繫結的,每個uid含有指定的url,username。是最簡單的key,value模型。所以,這類資訊非常適合做一層快取加速讀取查詢。
進一步的,每個人的好友基本上是有限的,頭像,使用者名稱等資訊,甚至可以在APP層面進行快取,也不會消耗移動端過多容量。但是反過來看,每次都到後段去讀取,不但浪費了移動端的流量頻寬,也加劇了電量消耗。
總結
MongoDB的文件模型固然強大,但絕對不是等同於關係型資料庫的粗暴聚合,而是要考慮需求和業務,合理的設計。有些人在設計時,也會被文件模型誤導,三七二十一一股腦的把資訊塞到一個文件中。反而最後會帶來各種使用問題。
相關文章
- 微信小程式--仿朋友圈Pro(內容釋出、點贊、評論、回覆評論)微信小程式
- MongoDB在vivo評論中臺的應用案例MongoDB
- React 小案例 使用者評論React
- 淘寶商品評論介面,商品評論內容,天貓商品評論介面程式碼展示
- 雲音樂評論內容理解技術
- Python爬蟲,抓取淘寶商品評論內容!Python爬蟲
- 資料倉儲建模方法論
- 資料治理:資料標準管理的內容和實踐!
- 資料治理:資料標準管理的內容和實踐
- QuillCMS – 基於Nodejs、Nuxtjs、MongoDB構建內容管理系統UINodeJSUXMongoDB
- 杉巖資料企業內容管理解決方案
- 案例丨「PB級資料」股份制銀行內容管理平臺的探索與實踐
- MongoDB 在評論中臺的實踐MongoDB
- 如何解決小網站內容管理問題網站
- MongoDB 資料庫管理和開發:Navicat for MongoDB macMongoDB資料庫Mac
- 女朋友朋友圈曬自拍,怎麼評論呢
- MongoDB案例分享:如何使用oplog恢復資料MongoDB
- 【北亞資料恢復】MongoDB資料遷移檔案丟失的MongoDB資料恢復案例資料恢復MongoDB
- 資訊資源管理文字題之“結合案例分析資訊資源規劃包含的內容”
- Python3內建模組之Pickle和cPickle資料持久化方法小結Python持久化
- 教你如何用 MongoDB 實現評論榜功能MongoDB
- 京東商品評論資料介面,電商平臺評論介面,行業商品評論資料介面程式碼封裝教程行業封裝
- 淘寶商品評論資料介面,電商平臺評論介面,行業商品評論資料介面程式碼封裝教程行業封裝
- 網站怎麼修改評論資訊,如何管理和編輯網站評論網站
- NoSQL 資料庫案例實戰 -- MongoDB資料備份、恢復SQL資料庫MongoDB
- 女朋友朋友圈發自己照片怎麼評論她呢
- 回覆女朋友朋友圈自拍照的甜蜜評論
- 資料與內容中臺
- 資料治理包括哪些內容
- 內容營銷管理
- 黑馬PM-內容專案-內容管理
- 微信小程式 swiper 迴圈遍歷N個資料內容微信小程式
- 數論內容簡要整理
- 女朋友朋友圈發自己照片怎麼評論呢影片
- 使用mongo-express管理mongodb資料庫ExpressMongoDB資料庫
- 微信疑似推出朋友圈多內容摺疊功能HQTQT
- 軟考案例分析重點內容
- 資料建模
- MongoDB資料庫報錯,資料庫檔案丟失資料恢復案例MongoDB資料庫資料恢復