将评论和文章放在一起,这里我有一个疑问,当评论数量很大以后,会不会导致在查询文章列表页的时候效率低下?
如果将comments
剥离到另一个collection
里,这样是不是能缓解只显示文章列表的情况下的压力
{ "_id" : ObjectId(), "author" : "", "comment_num" : "", "comments" : [ { "text" : "", "created" : ISODate(), "author" : "" }, ], "created" : ISODate(), "text" : "", "title" : "" }
大家讲道理2017-04-21 10:59:50
@halty 說得很好,不完全同意他的觀點。如果評論不多,放在一起的設計很合適,樓上說得很好。但是如果評論多了,問題就來了。最重要的有兩基本出發點: 1. 硬碟太慢; 2. 只要資料在記憶體裡,就沒問題。
綜上,評論特別多的時候,會影響性能。
總結,schema設計要考慮
find
裡提到的記憶體利用不充分,其實不是大問題。因為熱門文章的評論總有不少人看,放內存裡也不錯。如果document一直長呀長,MongoDB會自動地在分配磁碟空間時多分配一些。 話說回來了,我覺得絕大多數這類應用的評論都不會過百吧……這時候單文檔就發揮出優勢了,幾百評論都沒問題的,題主的問題就不是問題了。希望題主的應用能突破這個數字…
ringa_lee2017-04-21 10:59:50
首先確認一點:當評論數量很大以後,不大會導致在查詢文章列表頁的時候效率低下。你可以再指定查詢結果集的document只傳回部分field的資料(需要注意的是,如果對這種只包含部分field資料的document進行更新再儲存時,有可能會出錯),推薦這樣做,能夠很好的節省網路頻寬。
此外,目前mongodb對於單一document的大小是有限制的,如果評論數量過多時,會有可能超過document的預設大小限制,這個時候就需要剝離comment了。