【问题标题】:Is it a bad practice to run many queries with the same transaction at parallel mode?在并行模式下使用同一事务运行多个查询是一种不好的做法吗?
【发布时间】:2019-10-25 16:50:33
【问题描述】:

我正在使用 Promise.all() 对具有相同事务的 MySQL 数据库执行许多查询,因此所有查询都是并行执行的,如果发生任何不好的事情,我会回滚事务。但是一位朋友说并行运行查询是一种不好的做法,因为如果查询失败并且事务回滚,那么在 MySQL 中还会有其他使用相同事务的查询仍在运行,如果他们没有找到该事务,就会报错在 MySQL 本身中。

他建议串行执行查询,因此如果发生不好的事情,事务将回滚并且下一个查询将不会执行。 我试图找到一些关于这个问题的证明,但我找不到或者我错过了一些(如果存在的话)。

希望有人可以为我提供明确的答案或参考,并在此致谢。

【问题讨论】:

    标签: mysql node.js promise transactions


    【解决方案1】:

    here 描述的 Promise.all() 方法等待所有承诺解决,如果只有其中一个被拒绝,它也会被拒绝。所以问题是 1. 您的所有方法是否都传递给 promise.all() 返回 promise 或者它们正在使用回调函数? 2. 这些方法中的哪一个首先运行重要吗?因为 promise.all() doesn't care in what order they resolve 3. 有多少方法返回拒绝是否重要,因为 promise.all() 在第一次拒绝时会拒绝。 此外,如果您将此方法用于 MySQL 等,有时您的 ORM 可能会以某种方式处理该问题,但会拒绝。 所以我个人同意你的朋友的观点,因为这种方法很难控制,但也许可以找到它的用途:)

    PS:希望其他贡献者能帮助我解决我错过的其他问题。

    【讨论】:

      猜你喜欢
      • 2016-09-26
      • 1970-01-01
      • 2019-04-19
      • 2017-03-31
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      相关资源
      最近更新 更多