什么是事务?
事务就是以可控的方式对数据资源进行访问的一组操作。
原子性(atomicity):事务所包含的操作是不可分割的整体。要么都做,要么都不做。
一致性(consistency):事务执行前和执行后数据都必须保持一致性。
隔离性(isolation):多个事务对同一数据进行并发访问,各个事务之间的影响程度。不同的隔离级别决定不同事务对同一数据访问的不同行为。
Read UnCommitted。最低的隔离级别,一个事务可以读取另一个事务没有提交的结果。可能导致脏读,不可重复读,幻读
Read Committed。大部分数据库的默认隔离级别,一个事务的更新操作只有在提交之后,别的事务才能读取。可以避免脏读,不能避免不可重复读,幻读。
RepeatTable Read。保证在整个事务过程中,对同一个数据的读取结果一样的。但是不可避免幻读。
Serializable。最高隔离级别。所有事务必须按照顺序执行,避免所有隔离级别带来的问题,但是性能最差,通常情况下,我们采用其他隔离级别和并发锁机制来控制对数据的访问。既保证性能又保证一致性。
持久性(Durability):事务一旦提交,对数据的操作不可逆转。
一个事务处理场景有几个参与者:
Resource Manager。简称RM,它负责存储并管理系统数据资源的状态,比如数据库服务器,JMS消息服务器等都是相应的Resource Manager。
Transaction Processing Monitor。简称TPM,它的职责是在分布式事务场景中协调包含多个RM的事务处理。TPM通常对应特定的软件中间件。
Transaction Manager。简称TM,它可以认为是TPM中的核心模块,直接负责多RM之间事务处理的协调工作,并且提供事务界定,事务上下文传播等功能接口。
Application。以独立存在的或者独立于容器中的应用程序,可以认为是事务边界的出发点。
全局事务。如果整个事务处理过程中有多个RM参与,那么就需要引入TPM来协调多个RM之间的事务处理。TPM将采用两阶段提交协议来保证整个事务的ACID属性。这种场景下的事务就成为全局事务或者分布式事务。
局部事务。如果当前事务只有一个RM参与其中,我们就可以称当前事务为局部事务。如在当前事务中只对一个数据库进行更新,或者只向一个消息队列中发送消息的情况。
全局事务和局部事务的主要区分在于事务中涉及多少RM,而不是系统中实际上有多少RM。
网友评论