簡體   English   中英

使用每天處理許多請求的“mssql”庫的 Node 應用程序的最佳設計是什么?

[英]What is the best design for a Node application using 'mssql' library that handles many requests per day?

我正在嘗試優化(並防止崩潰/錯誤)我的應用程序,該應用程序每天需要執行數百或數千個 SQL 查詢,我想知道 mssql 的最佳設計/設置是什么。

我知道使用await sql.connect()和每個查詢可能效率不高(這似乎也更慢)。

我之前所做的如下:

sql.js

const sql = require('mssql');
const config = require('./util/db-config.js');

async function connect () {
    await sql.connect(config)
}

async function someDatabaseFunction () {
    await sql.query('sql statement').then((table) => {
        //do stuff here
    }
}
module.exports = {connect, someDatabaseFunction}

app.js

const express = require('express');
const {connect, someDatabaseFunction} = require('./sql.js'); 
const app = express();

connect()

app.post('/someroute', async (req, res) => {
    await someDatabaseFunction()
});

app.listen(3000, () => console.log('Running on port 3000!'))

所以基本上我在sql.js的全局范圍內執行const sql = require('mssql') (這就是它的名字嗎?),並在應用程序啟動時運行connect()函數,然后在sql.js使用全局連接池來執行查詢。

這以前對我有用,但是當我為更大規模和更關鍵的操作進行開發時,我擔心如果與數據庫的連接中斷/失敗會發生什么......這種設置是否有“最佳實踐”?

您應該首先將您的數據庫調用包裝在 try/catch 語句中,以便能夠捕獲失敗的查詢和崩潰。 然后通過重置連接或糾正/取消查詢來處理它們。

它仍然會很完美,特別是如果你需要抽象一些東西以擴大規模,但它應該會增加一點應用程序的健壯性。

適當的錯誤處理總是好的做法!

您可能可以通過在索引文件中執行以下操作來解決此問題

/** 你所有的路由都在這里配置*/

connect().then(
 app.listen(3000=>console.log('Running on port 3000!'))
).catch((err)=>{

 console.log("Unable to connect to db", err);
 process.exit(1);
})

基本上這樣做是我們嘗試在服務器啟動時建立與數據庫的連接,如果沒有,那么我們優雅地關閉該進程。

理想情況下,您需要一些東西來重新啟動應用程序,並為 lb 設置健康檢查,如果您有一個來引導流量,如果應用程序不健康的話。

請參閱此處以重新啟動您的應用程序: Node JS auto restart all forever JS process when server down / crashs

對於 nodejs 最佳實踐,請參見此處: https ://github.com/goldbergyoni/nodebestpractices

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM