在我們公司內某個使用 MongoDB 的專案中,我們發現隨著資料量越來越大,有一隻 API 的執行速度異常緩慢,有時候甚至需要等待 5 秒,這個速度已經明顯影響到使用體驗了。
這篇文章將會說明我們是如何解決這個問題,最後將此 API 的等待時間優化到 100ms 以內。
優化前
優化後
這隻 API 功能是「列出所有使用者與其部門的資訊」,支援分頁 (pagination) 與關鍵字搜尋,呼叫 API 時,後端會在「三個」MongoDB 的 collection 中合併資料,並且將資料整理後回傳。
備註:MongoDB 的 collection 相當於 SQL 的 table;lookup 相當於 SQL 的 JOIN
我們將使用者相關的資料拆成三個 collection,如下:
account
使用者資料表
_id
, username_1
department
部門資料表
_id
department_account
「使用者資料」與「部門資料」的關聯表
_id
, account_id_1_department_id_1
, department_id_1_account_id_1