gpt4 book ai didi

MySQL/PostgreSQL - 是否可以在事务中执行并行写入?

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:42 24 4
gpt4 key购买 nike

如果我必须同时更新两个不同的行,但如果另一个更新失败则不能更新一个,我目前的想法是使用事务。

但是事务能够执行并行操作吗?

如果我不需要查询结果来执行下一个查询,有没有办法同时运行查询?

这是一个理论问题,所以:

  • 行不必在同一个表上
  • 操作可以是更新、插入或删除(在同一个表上,插入是按顺序处理的,但在许多不同的表中?)
  • 解决方案不必在 SQL 中(也许有一种方法可以从客户端获取某种“障碍事务”,然后异步运行查询?)

我通过寻找问题的答案了解了关系数据库中的锁和并发问题,但没有找到我要找的东西......

最佳答案

是的,这是可能的;它被称为distributed transaction .它是用 two-phase commit 实现的在 MySQL 和 PostgreSQL(以及我听说过的每个 RDBMS)中。

想法是您在两个并发数据库 session 上启动事务。当您必须在一个事务中回滚时,您也会在另一个事务中回滚。

完成工作后,您可以准备这两项交易。这是一个特殊的过程,它完成实际提交之外的所有工作,以便保证后续提交的工作。此外,必须保留这样一个准备好的事务,以便它能够在崩溃中幸存下来。

如果数据库的准备步骤失败,您将回滚两个事务。

一旦所有事务都已成功准备好,您就可以提交它们。那应该永远不会失败,因为所有的“艰苦工作”都已经在准备过程中完成了。

您需要一个组件来协调工作。该组件称为事务管理器,并且必须保留每个事务的状态,以便即使工作因崩溃或其他原因而中断,它也可以继续处理。该组件确保所有事务都已提交或回滚。

PostgreSQL 和 MySQL 的 SQL 语句不同:

          |         PostgreSQL         |       MySQL
----------+----------------------------+--------------------
start | BEGIN | XA START
prepare | PREPARE TRANSACTION <name> | XA PREPARE <name>
commit | COMMIT PREPARED <name> | XA COMMIT <name>
rollback | ROLLBACK PREPARED <name> | XA ROLLBACK <name>

请参阅 PostgreSQL 的文档和 MySQL .

关于MySQL/PostgreSQL - 是否可以在事务中执行并行写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50392243/

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