在我們公司內某個使用 MongoDB 的專案中,我們發現隨著資料量越來越大,有一隻 API 的執行速度異常緩慢,有時候甚至需要等待 5 秒,這個速度已經明顯影響到使用體驗了。

這篇文章將會說明我們是如何解決這個問題,最後將此 API 的等待時間優化到 100ms 以內。

優化前

Screenshot 2024-04-13 at 10.13.18 PM.png

優化後

Screenshot 2024-04-13 at 10.13.32 PM.png

這個 API 在做什麼?

這隻 API 功能是「列出所有使用者與其部門的資訊」,支援分頁 (pagination) 與關鍵字搜尋,呼叫 API 時,後端會在「三個」MongoDB 的 collection 中合併資料,並且將資料整理後回傳。

備註:MongoDB 的 collection 相當於 SQL 的 table;lookup 相當於 SQL 的 JOIN

我們將使用者相關的資料拆成三個 collection,如下:

  1. account 使用者資料表
  2. department 部門資料表
  3. department_account「使用者資料」與「部門資料」的關聯表