gpt4 book ai didi

node.js - 关闭空闲连接 : Does Sequelize allow me to view how long a DB connection has been idle?

转载 作者:行者123 更新时间:2023-12-03 22:24:23 29 4
gpt4 key购买 nike

我的应用服务器为每个租户使用一个数据库,我需要一次连接到多个数据库。为此,我使用 Sequelize 维护一个数据库池,在其中添加到 Map 的连接:

addConnection(dbKey) {
const sequelize = new Sequelize(
dbKey,
"username",
"password",
{
host: localhost,
port: 5000,
schema: 'main',
dialect: 'postgres'
}
);

const models = {
sequelize: sequelize,
customerData: CustomerData(sequelize, DataTypes)
}

this.dbPool.set(dbKey, models);
}
这使我可以根据需要检索 Sequelize 实例。目前,我没有看到对管理与多个数据库的连接的单个 sequelize 实例的任何支持。而且因为我正在维护自己的连接映射,所以我似乎需要执行释放空闲连接的任务。
如果它们在特定时间间隔内未使用,我想关闭空闲连接并将它们从 Map 中删除。我考虑了几种方法,但不知道哪种方法可行。真的降到了2..
1 - 为 Sequelize 实例设置 options.pool.idle。
> The maximum time, in milliseconds, that a connection can be idle before being released.
AFAIK 这不符合我的要求,仅当有同一个数据库的连接池时才会设置超时,所以这显然行不通。
2 - 使用 SetInterval 关闭连接并在空闲时从 Map 对象中删除它们的引用。
a) When opening connection, set a timestamp along with connection.

b) Whenever the sequelize instance is used to make a query, update the timestamp.

c) Every minute or so, close and free any connections that have been idle for longer than some time period.
为此,如果 Sequelize 或 getter 中有一些内部字段可以让我看到上次使用连接的时间,那就太好了。查看 Sequelize 和模型实例的 API,我没有看到这样的字段或方法。有没有办法确定 Sequelize 库中最后一次使用连接的时间?

最佳答案

当您创建一个新的 Sequelize 实例时,它默认在后台创建一个池。
你可以看看options.pool可用于实例初始化的对象。
https://sequelize.org/master/class/lib/sequelize.js~Sequelize.html#instance-constructor-constructor :

const sequelize = new Sequelize(
dbKey,
"username",
"password",
{
host: localhost,
port: 5000,
schema: 'main',
dialect: 'postgres',
pool: {
idle: 10000, // milliseconds
evict: 20000, // milliseconds
}
}
);
它的默认值如下:

public constructor(database: string, username: string, password: string, options: object)




姓名
类型
属性
描述


options.pool
目的
选修的
sequelize 连接池配置

options.pool.max
数字
可选,默认:5
池中的最大连接数

options.pool.min
数字
可选,默认值:0
池中的最小连接数

options.pool.idle
数字
可选,默认:10000
连接在被释放之前可以处于空闲状态的最长时间(以毫秒为单位)。

options.pool.acquire
数字
可选,默认:60000
该池在抛出错误之前尝试获取连接的最长时间(以毫秒为单位)

options.pool.evict
数字
可选,默认值:1000
时间间隔,以毫秒为单位,之后 sequelize-pool 将删除空闲连接。

options.pool.validate
功能
选修的
验证连接的函数。与客户通话。默认函数检查客户端是一个对象,并且它的状态没有断开连接

options.pool.maxUses
数字
可选,默认:无穷大
在丢弃连接以进行替换之前可以使用连接的次数,用于最终的集群重新平衡。


因此,它将根据上述默认值或您提供的值自动释放和获取连接。
因此,假设在 10000 毫秒内没有执行任何查询,然后按照默认值 options.pool.idle 释放连接.
因此,当一段时间没有触发查询时,sequelize 实例就在那里,没有任何实时数据库连接。因此,如果没问题,您可以保持原样。或者可以使用下面的连接 Hook 来识别连接并维护一个计数器来初始化/删除 Map 中的 Sequelize 实例。
您可以在此处查看连接 Hook 文档:
https://sequelize.org/master/manual/hooks.html#connection-hooks

关于node.js - 关闭空闲连接 : Does Sequelize allow me to view how long a DB connection has been idle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67100211/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com