5

我正在开发一个express基于 - 的应用程序,它对不同的(用户不同!)SQL Server 2008 和 2014 数据库进行一些查询。这是不同的,因为每个用户属于不同的公司,每个公司都有自己的 SQL Server。我的应用程序使用自己的 SQL Server 来管理公司及其 SQL Server 连接字符串(我的应用程序可以访问他们的数据库服务器)。我正在使用该mssql模块。

我没有找到关于“我应该为每个用户会话使用一个 SQL Server 连接还是为每个用户请求使用一个连接”的最佳实践。

来自 .NET 世界,我们有一条规则:“一个查询/功能 - 一个连接”

首先,应用程序必须查询自己的应用程序数据库,以获取用户公司数据库的 SQL Server 连接字符串。然后,用户可以从他们公司的 SQL Server(在我的应用程序中)检索一些数据,例如getAccounts(). 这些函数中的每一个(每个函数- 不是该函数中的每个请求!)都会打开一个新连接并在查询完成后关闭它:

let connection = new mssql.Connection(conStr, (err) => {     
  request.query(queryString, (err, result) => {
    if (err) 
      throw new Error('...');        
    resolve(result)
    connection.close();
  });
})

据我了解,如果每个请求有 100 个用户打开和关闭连接(假设每个用户同时只有一个请求),或者如果 100 个用户有 100 个打开的连接(每个用户一个),它应该没有(负)差异整个会话。乍一看,我的方法似乎较少占用资源,因为仅在需要时才打开连接(即每个请求几秒钟)。

我错过了什么吗?如果 200 个用户同时访问我的应用程序会怎样——我会以某种方式遇到麻烦吗?

提前致谢!

[编辑]

据我所理解,

let connection = new mssql.Connection(...)

将创建一个新的连接池,当我使用类似的东西时,它将打开一个新连接

connection.connect()

并关闭所有活动连接

connection.close()

所以我猜测我的场景中的最佳实践是为new mssql.Connection(..)每个活动用户创建一个连接池 (),将其保存在某种会话存储中,然后在会话的整个生命周期中重复使用它。

这是一个好方法吗?

我只想避免一件事:用户因为无法创建连接而收到错误。

4

0 回答 0