[英]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.