我在多线程环境中有以下流程
我使用乐观锁来处理多线程场景,但在上面的情况下,DB总是返回相同的行集,因此如果第二个线程同时运行它将始终失败。
有没有更好的方法来解决这个问题? 我们可以使用某个选项强制DB为每个事务返回不同的行集吗?
答案 0 :(得分:1)
您为所有主题获得相同的热门n
记录的原因是因为 ACID中的 I (原子性,一致性,隔离性,持久性)交易原则。隔离意味着其他操作无法访问在尚未完成的事务期间已修改的数据。因此,在您的线程提交其事务之前,其他线程无法看到它们已完成的操作。
可以将大多数数据库中的 Isolation level 更改为以下之一:
在您的情况下,您可能希望READ UNCOMMITTED,因为它允许一个事务查看某些其他事务所做的未提交的更改。
注意:对于大多数应用程序来说,这几乎肯定是错误的隔离级别,并且可能导致数据损坏。如果您在此处描述的其他应用程序正在访问同一个数据库,您可能不会我想更改隔离级别,因为这些应用程序可能会开始看到意外和不正确的行为。