[英]Hibernate and Concurrency
我已经阅读了有关并发的hibernate文档 ,我认为,我已经了解了可用的锁定方法 ,但我不确定如何实现以下方案。
两个客户端F(快速)和S(慢速)访问数据库并可以修改相同的对象。
现在,还有一个要求:客户端F尽可能快地执行应用程序至关重要。
你会如何解决这个问题?
乐观锁定的问题:假设F尝试更新其更改但无法成功执行此操作,因为S已更新其数据。 将从hibernate抛出异常(StaleObjectStateException)。 我将捕获此异常并合并更改并再次尝试完全相同的事务,对吧? 然后我不喜欢F重试其事务直到它成功的情况,因此F理论上可以阻塞很长时间。 我是否应该忽略这一点并希望这种情况在实践中很少见? 或者我可以给我的客户端像数据库锁定优先级?
其他用户可以忍受这个问题:
StaleObjectStateException(乐观锁定)...我们每10000次调用获得3个例外。
捕获StaleObjectException:s并增加应该更快的线程的优先级。 StaleObjectException:s应该很少见。 如果这不适合您,请查看悲观锁定。
跳出来的第一件事是,如果你要求A + B尽可能快地执行,那么在捕获和处理异常时你将会大幅减速。 这个过程非常缓慢。
我必须阅读你的帖子很多次,才能完全掌握你所说的内容并提供更好的解决方案,但对于初学者,我会立即考虑在这种情况下不使用例外。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.