sequelize 和 pg 共享一个数据库连接池
Posted
技术标签:
【中文标题】sequelize 和 pg 共享一个数据库连接池【英文标题】:Share a database connection pool between sequelize and pg 【发布时间】:2017-01-20 07:56:09 【问题描述】:我有一个使用 Express 和 node-postgres (pg) 编写的服务器。它创建自己的数据库池:
const dbPool = new pg.Pool(dbConfig);
并使用此连接直接运行 SQL 查询。
现在我正在添加一个新表和相应的 REST API。我想使用sequelize 和epilogue 来减少样板。不幸的是,sequelize 想创建自己的数据库连接池:
const sequelize = new Sequelize(database, user, password, config);
是否可以重复使用现有的连接池,或者在我现有的pg
代码和我的新sequelize
代码之间共享它?
【问题讨论】:
为什么要为同一个连接使用两个不同的数据库框架? @vitaly-t 因为我想将 sequelize 用于一些新功能,而无需迁移所有现有的 node-postgres 代码。当前的解决方案是只有两个连接。没关系,我只是想检查一下是否有一种认可的方式来建立单一连接。 这是两个独立的池,具有不同的协议和底层对象。所以除非你愿意破解这两个库,否则答案是否定的,你不能照原样做。 我想要这个是因为相反的原因:我在 Sequelize 中有现有代码,但想使用 pg.Pool 的一个功能,该功能无法通过 Sequelize 获得。 【参考方案1】:Sequelize 不提供传递自定义池的选项,但您可以传递用于创建 sequelize 池的选项,例如最小和最大连接数。
在您的情况下,我会检查您的总数据库连接数,并根据您的两个池的预期使用情况进行重新分区。
例如,如果您的数据库最多有 20 个连接:
const dbPool = new pg.Pool(
max: 10
);
const sequelize = new Sequelize(/* ... */,
// ...
pool:
max: 10,
min: 0,
acquire: 30000,
idle: 10000
);
我还建议使用环境变量来设置您的 sequelize 池和 nod-pg 池的最大连接数,以便您可以在需要时轻松调整重新分区。
【讨论】:
以上是关于sequelize 和 pg 共享一个数据库连接池的主要内容,如果未能解决你的问题,请参考以下文章