为了处理并发问题,锁定——无论是行锁、表锁还是数据库锁定都是一个好的解决方案吗?
如果不是,如何处理并发问题?
首先,您需要明确您的目标。在并发请求的情况下,您是希望赢得最后一个用户还是第一个用户。 数据库锁定肯定不是一种好的方式。尽可能晚地锁定表/行,并尽快释放锁。
数据库锁定 - 与表或行锁定相反 - 是处理并发的一种不好的方式;它排除了并发。
有许多合理的替代方式,可以避免自己编写DMBS锁定代码。需要记住的是,某种类型的锁定实际上总是会发生(原子操作等),但关键在于如果没有必要,您不希望去那里。 如果没有必要,你不想和哲学家一起用餐。交易是绕过锁定的一种方法,但这主要是针对提交而言。使用标记/指示记录已更改(Dirty bit pattern)的字段是另一种方法,只需确保以原子访问方式进行即可。通常语言中都有适当的解决方案,如之前的帖子所述,但通常语言仅支持应用程序、处理到处理级别的并发,并且有时并发必须在数据库中。我不想假设您拥有丰富的应用程序层,但如果有,有许多抽象层可以为您处理此问题。Oracle的TopLink是免费的,并且是Hibernate的更强大的兄弟,两者都可以通过抽象化、脏位、缓存和延迟锁定来帮助您管理数据库并发挑战。除非您正在为学校或个人项目编写代码,否则您真的不想自己实现这些功能。理解问题,但站在巨人的肩膀上。