說我希望我的首頁顯示「整個站點的註釋總數」等統計信息。對Comments集合中的所有文檔進行查詢並獲取長度會更好嗎?還是隻有統計信息的單個集合會更容易?貓鼬模式來保存站點統計信息
我最初的直覺是隻查詢評論集合和抓取長度,但隨着評論的增長,查詢將變得昂貴。對一些文檔使用集合似乎效率不高,並且需要更多的邏輯來在評論發生時更新它。
哪種方式是正確的方式?
說我希望我的首頁顯示「整個站點的註釋總數」等統計信息。對Comments集合中的所有文檔進行查詢並獲取長度會更好嗎?還是隻有統計信息的單個集合會更容易?貓鼬模式來保存站點統計信息
我最初的直覺是隻查詢評論集合和抓取長度,但隨着評論的增長,查詢將變得昂貴。對一些文檔使用集合似乎效率不高,並且需要更多的邏輯來在評論發生時更新它。
哪種方式是正確的方式?
「正確」是主觀的,但實際上,您的第二個策略是將count()
緩存到另一個集合中。使用內存中的緩存(例如memcached
)更爲典型,因爲這些計數是暫時的,並且您可能不需要持久保存它們的I/O開銷(除非您還繪製某種歷史記錄? )。當您的應用程序啓動時,您可以使用當前計數來填充緩存。
值得注意的是,您的緩存計數器不一定是確切匹配的數據庫查詢返回的count()
。一旦你有了一個開始計數,你可能知道這個改變的唯一方法就是添加或刪除一個評論。使用類似mongoose-lifecyle的方法,您可以根據您的評論模型中的事件調整緩存計數,即afterInsert
(+1)和可能的afterRemove
(-1)。大多數網站只喜歡宣傳越來越多的統計數據,因此「總評論」的解釋通常是「總評論(永遠)」,而不是「當前發佈的總評論數量」。