繁体   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