2023-05-01|閱讀時間 ‧ 約 3 分鐘

【資料庫寶典 - MongoDB】 關於Mongo的連接池

不論我們使用Nodejs的Mongo Client還是Go語言甚至其他語言的套件, 應該都會看到連線選項中有poolSize這類的配置, 以下會介紹什麼是連線池、優點、應注意的事項。

單一連線機制

首先來談談連接池之前的單一連接機制, 在配置正確的狀況下可能不會遇到任何問題, 但假設我們的應用同時間有100個用戶進行查詢, 那麼通道只有一條, 在怎麼樣都得等待前一個人查詢並回傳完畢才能再服務其他人的查詢請求, 一旦請求量越來越高將導致系統開始變慢, 可能會遇到的幾個缺點及風險如下:
  • 每秒請求10個查詢可能還沒感覺到明顯延遲, 但假設每秒10000個以上的請求呢? 勢必降低查詢效率。
  • 我們整個系統都依賴於單一連線, 那麼假設這個連線在例外的狀況下被關閉時, 那麼是不是就無法回應給Client端了?
  • 連接到資料庫是一個成本昂貴的開銷, 因此常常連接關閉, 顯然不是一個有效率的策略。
為了改善上述缺點, 而發展出連接池的概念。

什麼是連接池?

連接池的機制下, 不僅能應付同時間大量請求的場景, 就連單一連線也能支援。
系統啟動時, 根據連線池數量配置, 創建N個連接並加入到連接池。
配置的數量過大亦會造成浪費, 這點需要取決於我們的應用量的估計。
每次跟DB請求前, 就會先從連接池中取得一條通道跟DB溝通。
當連接池的連線都被用滿的時候, 會等待其他人的連接被釋放。

套件預設的連線池數量

  • Node.js MongoDB Driver: 5。
  • mongo-go-driver: 0 ~ 100。

結論:

  • 確保線程安全, 大部分的Library都有考慮到這點, 因此不用過於擔心。
  • 避免在連接池配置過大的數量, 導致一個服務就佔據了大部分的連接數, mongo server預設接受65536個Connection。
  • 如何查詢佔用的連接數量: db.serverStatus().connections。
喜歡撰寫文章的你,不妨來了解一下:Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?歡迎加入一起練習寫作,賺取知識,累積財富!
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.