交易管理理念

时间:2014-04-21 09:55:30

标签: java transactions jta

我的问题是交易如何运作?

假设我正在更新事务中的记录,而另一个事务也将更新该记录。

1)我的交易读取该记录的值并尝试更新它 2)平均值,而第二个记录也读取与第一个记录相同的值并进行更新 3)在第二个事务提交之前,由于第一个事务已提交,它已经更改了该记录的值。

那么在这种情况下数据如何一致?

1 个答案:

答案 0 :(得分:0)

  

假设我正在更新事务中的记录,而另一个事务也将更新该记录。

理论上,每个事务应该独立执行(为了实现ACID属性的I),但实际上这没有多大意义。这完全取决于性能问题。高并发应用程序的数据库将无法以这种方式正确执行。

这个想法是在隔离和性能之间实现平衡。当隔离级别降低时(例如,通常是默认隔离级别的COMMITTED READ),会出现一些问题,如问题中描述的问题(称为“丢失更新”)。

  

那么在这种情况下数据如何一致?

有几种并发控制机制可以帮助解决“丢失更新问题”,例如: optimistic locking and pesismitic locking。哪一个更好取决于你的申请要求。