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