gpt4 book ai didi

java - 如何让DB为后续事务返回不同的行?

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

我在多线程环境中有以下流程

  1. 开始交易
  2. 从数据库中读取前 n 行(基于列)
  3. 检查一些条件
  4. 更新那些行集
  5. 提交/回滚事务

我正在使用乐观锁定来处理多线程场景,但在上述情况下,数据库总是返回同一组行,因此如果第二个线程同时运行,它总是会失败。

有没有更好的方法来处理这个问题?我们可以使用某些选项强制 DB 为每个事务返回不同的行集吗?

最佳答案

您为所有线程获得相同的顶级 n 记录的原因是 I ACID (原子性、一致性、隔离性、持久性)交易原则。隔离意味着其他操作无法访问在尚未完成的事务期间已修改的数据。因此,在您的线程提交它们的事务之前,其他线程无法看到它们做了什么。

可以将大多数数据库上的 Isolation level 更改为以下之一:

  • 可序列化
  • 可重复读
  • 已提交阅读
  • 阅读未提交

在您的情况下,您可能希望 READ UNCOMMITTED 因为它允许一个事务查看其他事务所做的未提交更改。

注意:对于大多数应用程序来说,这几乎肯定是错误的隔离级别,并且可能导致数据损坏。如果您在此处描述的应用程序之外的其他应用程序正在访问同一个数据库,您可能不会不想更改隔离级别,因为这些应用程序可能会开始看到意外和不正确的行为。

关于java - 如何让DB为后续事务返回不同的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3350983/

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