国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Node.js 服務連接 MongoDB 處理最佳實踐

sugarmo / 3329人閱讀

摘要:個人認為,這種方式相比一直等待數據庫重連直到響應超時體驗要更佳一點。當然,以上這套最佳實踐還存在一個不足如果服務初次啟動后未能成功連接數據庫比如數據庫此時處于宕機狀態,則服務不會嘗試重連數據庫。

關于如何處理 node.js 服務連接 MongoDB,我查閱了大量中英文資料,發現并沒有太適合我所期望的能力的方案,因此經過一番官方文檔的研究,總結了以下的連接 MongoDB 的方法(使用目前 Node.js 平臺最常用的 MongoDB ODM mongoose),斗膽稱之為『最佳實踐』,希望能夠拋磚引玉,得到大家更專業的解答。
話不多說,先上代碼:

const mongoose = require("mongoose")
const config = require("./config")


if (process.env.NODE_ENV === "development") {
  mongoose.set("debug", true)    /* A */
}

mongoose.set("bufferCommands", false)  /* B */

function connectMongoDB(address) {
  try {
    mongoose.connect(address, { 
      useNewUrlParser: true,
      bufferMaxEntries: 0   /* B */
      autoReconnect: true   /* C, default is true, you can ignore it */
      poolSize: 5           /* D, default is 5, you can ignore it */
    })
    
    const db = mongoose.connection
    db.on("error", (error) => {
      console.log(`MongoDB connecting failed: ${error}`)
    })
    db.once("open", () => {
      console.log("MongoDB connecting succeeded")
    })
    return db
  } catch (error) {
    console.log(`MongoDB connecting failed: ${error}`)
  }
}

const mongoInstance = connectMongoDB(config.database.mongo)
module.exports = {
    mongoInstance
}

這套連接方法能夠滿足以下需求,當然,這也是從我的服務需要滿足的需求中總結而來的:

開發環境下能夠打印詳細的數據庫操作信息

與數據庫斷開連接后,所有涉及到數據庫讀寫操作的命令均會立即返回錯誤,而不會等待重連進而造成接口超時

服務啟動并成功與數據庫建立連接后,如果數據庫出現問題造成連接中斷,服務會自動嘗試重連直到連接成功

無需手動處理連接數

我們逐條來看每個需求對應的配置:
1.見注釋 A,在開發環境中設置 "debug" 為 true,數據庫將會把集合方法和參數打印到控制臺。
2.見兩處注釋 B,這里貼一段 mongoose 文檔中對 bufferMaxEntries 的解釋:

bufferMaxEntries - The MongoDB driver also has its own buffering mechanism that kicks in when the driver is disconnected. Set this option to 0 and set bufferCommands to false on your schemas if you want your database operations to fail immediately when the driver is not connected, as opposed to waiting for reconnection.

核心意思就是將 bufferMaxEntries 設為 0 同時將 bufferCommands 設為 false,可以讓驅動在未連接到數據庫的時候,操作立即返回失敗,而不是一直在等待重連。個人認為,這種方式相比一直等待數據庫重連直到響應超時體驗要更佳一點。

3.見注釋 C,這實際上是 mongoose 的默認設置,其連接數據庫時的 config 參數 autoReconnect 默認為 true,其含義見文檔:

autoReconnect - The underlying MongoDB driver will automatically try to reconnect when it loses connection to MongoDB. Unless you are an extremely advanced user that wants to manage their own connection pool, do not set this option to false.

如果非高級用戶,就不要去改變這個參數了。

4.見注釋 D。對于 MongoDB 連接池的問題,建議是不要去手動處理。mongoose 自己會維護一個默認最大數量為 5 的連接池,只有當你發現有一些慢查詢可能阻塞快查詢時才應該考慮增大 poolSize。當然,這個數字不能設置得過大,MongoDB 默認是一個連接啟動一個線程來服務,連接太多線程數切換系統開銷會很大。

當然,以上這套『最佳實踐』還存在一個不足:如果服務初次啟動后未能成功連接數據庫(比如數據庫此時處于宕機狀態),則服務不會嘗試重連數據庫。解決方法也不是沒有,就是比較雞肋:在 mongoose 連接的 "error" 事件監聽回調函數中嘗試重連。但是需要設置最大重試次數,否則會發生內存泄露。比較雞肋的原因是,如果首次連接沒有成功,短時間內嘗試重連幾次貌似也無濟于事。因此,使用這套連接方式務必要注意數據庫保持可連接狀態。或者讀者們如果有更好的解決方案,也希望能不吝賜教。

完。

本文首發于我的博客(點此查看),歡迎關注。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/19403.html

相關文章

  • Node.js 配合 express 框架、mongodb 實踐 && [使用 T

    摘要:一默認使用的模塊化方案,默認是的模塊化方案,兩者有本質區別。的去尋找引入的依賴時,如果是自帶的模塊,比如文件模塊,只需要填寫即可。這是版本入口文件使用了兩個路由器路由,分別處理和請求邏輯。核心操作全部依賴模型對象來執行。 一、Node.js默認使用commonJs的模塊化方案,TypeScript默認是ES6的模塊化方案,兩者有本質區別。 1.Node.js的去尋找引入的依賴時,如果...

    wmui 評論0 收藏0
  • Node.js 配合 express 框架、mongodb 實踐 && [使用 T

    摘要:一默認使用的模塊化方案,默認是的模塊化方案,兩者有本質區別。的去尋找引入的依賴時,如果是自帶的模塊,比如文件模塊,只需要填寫即可。這是版本入口文件使用了兩個路由器路由,分別處理和請求邏輯。核心操作全部依賴模型對象來執行。 一、Node.js默認使用commonJs的模塊化方案,TypeScript默認是ES6的模塊化方案,兩者有本質區別。 1.Node.js的去尋找引入的依賴時,如果...

    null1145 評論0 收藏0
  • Node.js 配合 express 框架、mongodb 實踐 && [使用 T

    摘要:一默認使用的模塊化方案,默認是的模塊化方案,兩者有本質區別。的去尋找引入的依賴時,如果是自帶的模塊,比如文件模塊,只需要填寫即可。這是版本入口文件使用了兩個路由器路由,分別處理和請求邏輯。核心操作全部依賴模型對象來執行。 一、Node.js默認使用commonJs的模塊化方案,TypeScript默認是ES6的模塊化方案,兩者有本質區別。 1.Node.js的去尋找引入的依賴時,如果...

    xeblog 評論0 收藏0
  • node技術棧 - 收藏集 - 掘金

    摘要:異步最佳實踐避免回調地獄前端掘金本文涵蓋了處理異步操作的一些工具和技術和異步函數。 Nodejs 連接各種數據庫集合例子 - 后端 - 掘金Cassandra Module: cassandra-driver Installation ... 編寫 Node.js Rest API 的 10 個最佳實踐 - 前端 - 掘金全文共 6953 字,讀完需 8 分鐘,速讀需 2 分鐘。翻譯自...

    王偉廷 評論0 收藏0
  • Node Hero】5. Node.js 數據庫教程

    摘要:是一種設計用于關系型數據庫的查詢語言。另一方面,數據庫在最近十年變得相當流行。大多數數據庫都有驅動程序可以用,它們在上也有庫。我們已經完成了在中使用數據庫所必須知道的所有基礎知識。 本文轉載自:眾成翻譯譯者:網絡埋伏紀事鏈接:http://www.zcfy.cc/article/1751原文:https://blog.risingstack.com/node-js-database-t...

    Hujiawei 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<