1. 程式人生 > 其它 >MongoDB - 讀寫效能

MongoDB - 讀寫效能

資料庫請求流程

應用端

應用端視角里(MongoDB驅動程式與MongoDB進行互動),一次資料庫請求流程如下:

  • 選擇節點
    在複製集讀操作裡,選擇節點會受readPreference引數影響
  • 排隊等待
    總連線數大於最大連線數maxPoolSize,連線滿了如何解決:優化查詢效能,提高服務端資源等
  • 連線與認證
    等待建立連線和認證將比直接從連線池獲取連線更耗時,所以應該設定minPoolSize一次性建立足夠的連線,避免突發的大量請求

資料庫端

wiredTiger的ticket:大概有點像semaphore?

  • 排隊等待
    ticket是和系統的資源相關的,增大ticket並不會優化排隊等待,所以我們其實是需要優化CURD
  • 合併結果
    在mongos進行結果合併,儘量使用帶片鍵的查詢條件減少參與查詢的分片數

執行請求

執行請求(讀)的具體過程如下圖,造成效能問題的主要原因就是不能命中索引和記憶體排序

執行請求(寫),MongoDB預設是{j:false},即不用先刷盤,直接寫記憶體快取就能返回了,操作如下圖:

  • 磁碟速度必須比寫入速度快才能保證(寫頻繁情況下的)效能

效能瓶頸總結

  • 應用端:選擇入口節;等待資料庫連線;建立連線和完成認證
  • 服務端:排隊等ticket;執行請求;合併執行結果
  • 網路:應用/驅動->mongos;mongos->片