mysql - NodeJS 数据库(mysql)连接与事务管理

标签 mysql node.js transactions promise connection

在 NodeJS 应用程序中,当涉及事务时,管理连接数的最佳策略是什么(mysql 社区版)?

所以,这是我的思路-

1) 不要将控制权移交给 ORM 2) 将连接视为昂贵的商品 3) nodejs 的 mysql 模块似乎正在创建更多连接

假设,如果同时执行 n 个 promises(理解为单线程部分),每个都代表一个事务,我不希望它们中的每一个都创建 n 个连接——这很明显——但是当一个事务发生时会发生什么如果在 promise 之间共享连接,则需要回滚连接吗? ..我不希望一个事务在另一个事务也失败时失败..我希望“连接”对象更智能一些..这样当调用 beginTransaction 时,它提供了一个本地化的上下文......但是只是想确认是否是这种情况 - 我正在寻找一些文档。如果没有,某种 FIFO 队列来促进对这些事务进行排序似乎是前进的方向——但我们不是已经有了一个吗?你们还部署了哪些其他策略?

最佳答案

我会向您推荐 KnexJS,尤其是因为它的 transaction supprt和内置 connection pooling .我确信 Sequelize 也会以某种方式处理这个问题。

knex 的好处是您可以通过您的 promise 链传递此 事务 对象,如果任何 promise 失败(即使是非数据库错误,如业务规则! ) 交易 promise 将被拒绝,一切都会自动回滚。

我希望这对您有所帮助,并且到目前为止对我们来说“刚刚好”——我们目前不需要深入研究连接池的管理。

关于mysql - NodeJS 数据库(mysql)连接与事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47595925/

相关文章:

javascript - 在 GridFS、express、mongoDB、node.js 中存储来自 POST 请求的数据流

java - 回滚具有空 'rollbackFor' 属性的方法

mysql - 比较两个mysql表中的两列以找到不同的值

MySQL 插入连接表语句并更新连接表上的字段

mysql - 将选择中出现的 N 次字符串替换为 2 次

node.js - 如何在不重启服务器的情况下编辑和部署代码?

node.js - SequelizeEagerLoadingError 'Model 1' 与 'Model 2' 没有关联

Spring + Hibernate 如何防止回滚

python - django:在 transaction.atomic() 内提交和提升

MySQL 查询,从顶 View 电影中随机选择剧集,但仅当状态 = 0 时才基于