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

更新 發佈閱讀 3 分鐘

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

單一連線機制

首先來談談連接池之前的單一連接機制, 在配置正確的狀況下可能不會遇到任何問題, 但假設我們的應用同時間有100個用戶進行查詢, 那麼通道只有一條, 在怎麼樣都得等待前一個人查詢並回傳完畢才能再服務其他人的查詢請求, 一旦請求量越來越高將導致系統開始變慢, 可能會遇到的幾個缺點及風險如下:

  • 每秒請求10個查詢可能還沒感覺到明顯延遲, 但假設每秒10000個以上的請求呢? 勢必降低查詢效率。
  • 我們整個系統都依賴於單一連線, 那麼假設這個連線在例外的狀況下被關閉時, 那麼是不是就無法回應給Client端了?
  • 連接到資料庫是一個成本昂貴的開銷, 因此常常連接關閉, 顯然不是一個有效率的策略。

為了改善上述缺點, 而發展出連接池的概念。

什麼是連接池?

連接池的機制下, 不僅能應付同時間大量請求的場景, 就連單一連線也能支援。

系統啟動時, 根據連線池數量配置, 創建N個連接並加入到連接池。

raw-image

配置的數量過大亦會造成浪費, 這點需要取決於我們的應用量的估計。

每次跟DB請求前, 就會先從連接池中取得一條通道跟DB溝通。

raw-image

當連接池的連線都被用滿的時候, 會等待其他人的連接被釋放。

raw-image

套件預設的連線池數量

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

結論:

  • 確保線程安全, 大部分的Library都有考慮到這點, 因此不用過於擔心。
  • 避免在連接池配置過大的數量, 導致一個服務就佔據了大部分的連接數, mongo server預設接受65536個Connection。
  • 如何查詢佔用的連接數量: db.serverStatus().connections。

喜歡撰寫文章的你,不妨來了解一下:Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?歡迎加入一起練習寫作,賺取知識,累積財富!

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
140會員
305內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2023/08/08
我們在「【資料庫寶典】什麼是NoSQL?能吃嗎?」有談到一些NoSQL的特性,雖然本質上有所差異,但兩方技術發展的產品也都開始互相支援了,比如說MongoDB後來也發展出類SQL語法讓熟悉SQL的開發者可以降低進入門檻,而SQL、postgresql…等也紛紛納入一些NoSQL的元素,雙方都有開始接
Thumbnail
2023/08/08
我們在「【資料庫寶典】什麼是NoSQL?能吃嗎?」有談到一些NoSQL的特性,雖然本質上有所差異,但兩方技術發展的產品也都開始互相支援了,比如說MongoDB後來也發展出類SQL語法讓熟悉SQL的開發者可以降低進入門檻,而SQL、postgresql…等也紛紛納入一些NoSQL的元素,雙方都有開始接
Thumbnail
2023/05/02
範例句: 假設我們有一段文章以空白隔開的方式來切割詞彙,內容如下: 假設條件為: clauses:[提升,滿意度,問卷] 。 slop:4。 in_order: true ❗ 這裡的Slop代表範圍內不匹配的最大數量,從開始匹配的字詞框到最後加總一併進行計算。 查詢結構會是如此 請問上述條件是否能正
Thumbnail
2023/05/02
範例句: 假設我們有一段文章以空白隔開的方式來切割詞彙,內容如下: 假設條件為: clauses:[提升,滿意度,問卷] 。 slop:4。 in_order: true ❗ 這裡的Slop代表範圍內不匹配的最大數量,從開始匹配的字詞框到最後加總一併進行計算。 查詢結構會是如此 請問上述條件是否能正
Thumbnail
2023/05/01
通常我們如果希望一筆資料是能夠具備唯一性的狀況下, 勢必在新增前會進行檢查, 但是在我們的應用程式中, 先查詢再寫入勢必會造成一些時間差, 導致於多人同時操作時, 可能發生重複資料的狀況。 假設我們的應用是不允許名稱重複, 那我們的資料可能如下: 我們的業務邏輯為「當名稱存在時就更新、不存在就新增」
Thumbnail
2023/05/01
通常我們如果希望一筆資料是能夠具備唯一性的狀況下, 勢必在新增前會進行檢查, 但是在我們的應用程式中, 先查詢再寫入勢必會造成一些時間差, 導致於多人同時操作時, 可能發生重複資料的狀況。 假設我們的應用是不允許名稱重複, 那我們的資料可能如下: 我們的業務邏輯為「當名稱存在時就更新、不存在就新增」
Thumbnail
看更多
你可能也想看
Thumbnail
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
Thumbnail
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
Thumbnail
我們在「【資料庫寶典】什麼是NoSQL?能吃嗎?」有談到一些NoSQL的特性,雖然本質上有所差異,但兩方技術發展的產品也都開始互相支援了,比如說MongoDB後來也發展出類SQL語法讓熟悉SQL的開發者可以降低進入門檻,而SQL、postgresql…等也紛紛納入一些NoSQL的元素,雙方都有開始接
Thumbnail
我們在「【資料庫寶典】什麼是NoSQL?能吃嗎?」有談到一些NoSQL的特性,雖然本質上有所差異,但兩方技術發展的產品也都開始互相支援了,比如說MongoDB後來也發展出類SQL語法讓熟悉SQL的開發者可以降低進入門檻,而SQL、postgresql…等也紛紛納入一些NoSQL的元素,雙方都有開始接
Thumbnail
不論我們使用Nodejs的Mongo Client還是Go語言甚至其他語言的套件, 應該都會看到連線選項中有poolSize這類的配置, 以下會介紹什麼是連線池、優點、應注意的事項。 首先來談談連接池之前的單一連接機制, 在配置正確的狀況下可能不會遇到任何問題, 但假設我們的應用同時間有100個用戶
Thumbnail
不論我們使用Nodejs的Mongo Client還是Go語言甚至其他語言的套件, 應該都會看到連線選項中有poolSize這類的配置, 以下會介紹什麼是連線池、優點、應注意的事項。 首先來談談連接池之前的單一連接機制, 在配置正確的狀況下可能不會遇到任何問題, 但假設我們的應用同時間有100個用戶
Thumbnail
主要是收攏documents的容器, 可以支援各種不同結構的document。 不能為空字串。 不能以system開頭, 這是系統集合保留的前綴。 超過配置大小, 新增時當超過配置限額時, 會先從最早的document刪除後再append新的document。 更新時不能超過size限制。 不能刪除
Thumbnail
主要是收攏documents的容器, 可以支援各種不同結構的document。 不能為空字串。 不能以system開頭, 這是系統集合保留的前綴。 超過配置大小, 新增時當超過配置限額時, 會先從最早的document刪除後再append新的document。 更新時不能超過size限制。 不能刪除
Thumbnail
資料庫複製 不知道大家有沒有聽過負載均衡或者水平擴展呢?在網站佈署中我們會透過這些技術把網站架在多台 server 上,以避免萬一某台 server 掛掉,讓網頁服務仍能維持運作,或者去分擔負載 MongoDB 這邊有一個叫資料庫複製的技術,建立多個相同的 MongoDB service 在不同的
Thumbnail
資料庫複製 不知道大家有沒有聽過負載均衡或者水平擴展呢?在網站佈署中我們會透過這些技術把網站架在多台 server 上,以避免萬一某台 server 掛掉,讓網頁服務仍能維持運作,或者去分擔負載 MongoDB 這邊有一個叫資料庫複製的技術,建立多個相同的 MongoDB service 在不同的
Thumbnail
Connect database 因爲我們後端是用 django,所以我們要用 python 來操作 MongoDB,MongoDB 官方推薦的 python driver 是 pymongo,首先來安裝 在想使用的檔案內加入 myclient = pymongo.MongoClient("mong
Thumbnail
Connect database 因爲我們後端是用 django,所以我們要用 python 來操作 MongoDB,MongoDB 官方推薦的 python driver 是 pymongo,首先來安裝 在想使用的檔案內加入 myclient = pymongo.MongoClient("mong
Thumbnail
上一篇有提到 MongoDB Compass,而且也已經裝好了,那就來介紹一下吧 MongoDB Compass 是官方做的圖形介面工具用來操作架好的 MongoDB service,這樣就不用什麼事情都辛苦的用 mongo shell 操作了 New connection 輸入想要連接的 Mong
Thumbnail
上一篇有提到 MongoDB Compass,而且也已經裝好了,那就來介紹一下吧 MongoDB Compass 是官方做的圖形介面工具用來操作架好的 MongoDB service,這樣就不用什麼事情都辛苦的用 mongo shell 操作了 New connection 輸入想要連接的 Mong
Thumbnail
承上篇【NGINX 架構 - 事件驅動架構】後續,這篇開始記錄函數庫的相關筆記 事件驅動處理函數庫: 函數庫的細節,就沒打算太過深入,我們只要知道模型的運作方式、優缺點及如何使用就足夠了。 1. select模型: 手動啟用模組編譯: 禁用模組編譯: 2. poll模型: Nginx編譯代碼:
Thumbnail
承上篇【NGINX 架構 - 事件驅動架構】後續,這篇開始記錄函數庫的相關筆記 事件驅動處理函數庫: 函數庫的細節,就沒打算太過深入,我們只要知道模型的運作方式、優缺點及如何使用就足夠了。 1. select模型: 手動啟用模組編譯: 禁用模組編譯: 2. poll模型: Nginx編譯代碼:
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News