Database 我应该在哪里处理相同数据上的并发操作?在应用程序中还是在数据库中?
所以我正在用Spring和Hibernate构建一个JavaWebApp。在应用程序中,userw可以向对象添加点,我想计算为排序对象而给定的点。这些对象也存储在数据库中。希望数以百计的人能同时给这些物体打分 但是我如何计算这些点并同时将它们保存在数据库中呢?通常我会在我的对象上有一个属性,然后增加点。但这意味着我必须用悲观事务锁定数据库中的数据,以防止并发问题(当另一个线程已经更改了一半时读取点数)。这可能会使我的应用程序慢得多(至少我认为会) 另一种解决方案是将给定点的数量存储在关联对象中,并将它们分别存储在数据库中,同时在“小”同步块或其他对象中计算内存中的点Database 我应该在哪里处理相同数据上的并发操作?在应用程序中还是在数据库中?,database,concurrency,transactions,synchronization,Database,Concurrency,Transactions,Synchronization,所以我正在用Spring和Hibernate构建一个JavaWebApp。在应用程序中,userw可以向对象添加点,我想计算为排序对象而给定的点。这些对象也存储在数据库中。希望数以百计的人能同时给这些物体打分 但是我如何计算这些点并同时将它们保存在数据库中呢?通常我会在我的对象上有一个属性,然后增加点。但这意味着我必须用悲观事务锁定数据库中的数据,以防止并发问题(当另一个线程已经更改了一半时读取点数)。这可能会使我的应用程序慢得多(至少我认为会) 另一种解决方案是将给定点的数量存储在关联对象中,
在处理相同对象上的多个并发操作时,哪个解决方案对性能的影响最小。或者是否有其他拟合解决方案?如果希望保留这些值,则应将其保留在数据库中 鉴于此,请尝试以下方法:
祝你好运。好的,听起来很合理,但你说mysql会给我最后一次提交的值。如果两个请求同时读取此值并尝试向数据库写入新值,会发生什么情况?最后一个写入的请求是否会出错,或者事务是否会阻止第二个请求继续执行,直到第一个请求完成?启动事务,读取值,写入增量值,提交事务。一切安全。