這篇文章是MongoDB University Data Modeling課程的筆記與心得。
Computed Pattern是用來解決: 很頻繁使用但loading很重或運算較久的query所造成的performance issue。
作法非常的簡單直覺,就是預先算好結果並貯存起來。
然而怎樣的運算才算loading重或運算較久又可以套用Computed Pattern呢?
以下將介紹3種類型:
數學運算
例如有個query會需要回傳最新100筆資料的平均,則運算步驟會包含: 拿取全部資料、照時間排序、拿取最新100筆資料及計算平均。這個query運算時間較長是可預期的,因為「拿取全部資料」有進行大量的I/O,還有排序全部的資料也需要運算時間。
如果每次有新的一筆資料進來時,就預先算好最新100筆的平均,則未來需要平均值時,就可以直接回傳,不用重複計算省時也省資源。
Fan Out On Read
這是指一個query需要從多個來源(collection或document)拿取資料來運算,造成運算時間很久的issue。
以頻道訂閱為例:如果每次拿取訂閱頻道的最新影片,都要從各個頻道找最新的影片,那會有一小段時間在等待搜尋,但如果每次頻道發布影片時,就將這個資訊貯存到訂閱者的最新影片清單裡,那就可以省去等待搜尋這段時間。
Roll Up Operation
Roll Up Operation是指將資料從不同的細緻度(granularity)來觀看。例如:假設我在全台都有自有品牌的分店,我可以看各分店月盈收、各縣市月盈收、北中南區各營收或總營收,除了各分店營收,其他都是由下方層級的營收加總上來的。如果能預先算好各種細緻度的營收,那就可以省下計算時間及資源
優點&缺點
優點是能夠節省計算時間與資源,缺點是這是一個非常容易被濫用的pattern,因為要實做非常簡單,且沒有資料同步的問題需要處理,所以請確認使用後效果卓越再使用!