【问题标题】:Functions with sequelize transactions and not transactions具有 sequelize 事务而不是事务的函数
【发布时间】:2021-02-27 19:48:39
【问题描述】:

我正在使用 sequelize 开发一个应用程序,我刚刚开始使用 transaction(),因为我希望我的查询能够回滚错误。所以我有我的常规功能

const customer = await Customer.findOne({ where: { email: { [Op.eq]: body.email } } });

现在我也有

const newCustomer = await Customer.create(body, { transaction: t });

目前一切正常,但我可以帮助考虑在同一操作中使用两者在性能方面是否是一个好主意。 (寻找一个已经创建的客户,如果它不存在,则根据电子邮件地址创建一个新客户)我认为他们都使用不同的交易,但我不确定这会如何影响我的池最大数量。

PD:我遇到了一些问题,查询似乎阻塞了我的节点或我的节点,我必须重新启动服务器才能使一切再次正常运行。

提前感谢您的帮助!

【问题讨论】:

    标签: node.js transactions sequelize.js


    【解决方案1】:

    如果您忘记在一个或多个查询中指示事务,则可能导致死锁,因为您将有两个事务更改/读取相同或链接的记录。 即使在像findOne 这样的读取操作中,您也应该指出一个事务:

    const customer = await Customer.findOne({ where: { email: { [Op.eq]: body.email } }, transaction: t });
    

    【讨论】:

    • 感谢您的回复 Anatoly,所以总结一下,如果我在函数中使用事务,我应该在该函数的每个“sequelize call”中使用它,如果我决定不在函数中使用它,例如,我执行单个“续集”操作的 get 函数也可以,对吧?
    • 没错。如果您检索一些与正在更改的其他数据不相关的数据,则可以对此规则进行例外处理。但这样很容易忘记在需要的地方指明交易。
    • 太棒了!感谢您的帮助
    猜你喜欢
    • 2019-09-24
    • 2020-04-10
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多