事务基本概念

来源:互联网 发布:河北兰科网络集团 编辑:程序博客网 时间:2024/05/19 02:19

1.什么是事务

含有一系列业务处理的执行逻辑单元,只有两个结果全部成功或全部失败


2.事务的特性ACID

原子性(Atomicity):事务包含的操作全部成功或者全部失败

一致性(Consistency):数据完整性和一致性要在事务执行钱后保持一致

隔离性(Isolation):事务互相隔离互不干扰

持久性(Durability):事务提交后数据应该被永久的保存下来,出现宕机等故障后可以恢复数据


3.事务的隔离性

未授权读(Read Uncommitted):允许事务读取其他事务操作的未提交的数据。

会出现脏读,A事务修改了摸个数据没有提交,B事务读取到了A修改后未提交的数据,之后A事务进行了回滚,B事务获得的数据是无效的

授权读取(Read Committed):只允许读取获得已经提交的数据。

会出现不可重复读,A、B两个事务先后对相同数据进行修改,C事务在A、B事务提交后分别读取了一次数据,这2次数据的值是不一样的

可重复读(Repeatable Read):保证在一个事务中多次读取同一个数据时只都是一致的

会出现幻读,对同样数据的在2次相同的读取事务中获得的数据值不同

串行化(Serializable):最严格的隔离级别,事务被串行化执行不允许并发


4.分布式事务

分布式事务的参与者位于分布式系统的不同节点上,每个参与者可能有自己的事务,因此可以理解为分布式事务是嵌套了多个子事务的事务。


分布式中的定理:

CAP定理:

一个分布式系统,只能同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)之中的2项

一致性:分布式系统中对一个数据进行修改后所有节点都可以读取到最新值,不会出现脏读

可用性:系统必须在有限时间内给出有效的返回结果,超出系统正常响应时间和返回异常结果都被认为系统是不可用的

分区容错性:分布式系统中允许出现分区,分区是由于网络或机器故障导致数据节点间不能全部互相联通,形成的子网络分区


个人对cap的理解:如果满足一致性和可用性,就不可能出现分区。如果满足分区容错一致性和可用性只能2选一,要么对外不可用,分区间进数据同步,要么对外可用就不能保证分区间数据一致


BASE理论:

BASE是基本可用(Basically Available) 、 软状态(Soft state) 、 最终一致性(Eventually consistent)的意思,系统不能保证强一致性和不出现故障,因此提供了基本的可用性,数据在完成一致性处理过程中会有中间状态,经过一段时间最终达到一致。

基本可用性:以降低性能和减少功能为代价提供可用性

软状态:数据节点间进行数据同步的中间状态,非强制一致

最终一致性:经过一段时间同步数据节点间数据最终达成一致


------------------------------------------------------


1. 数据库事物的基本原理

数据库采用临时表处理对记录的增、删、改操作,同时锁定原始表中的相关记录,交后将临时表中的数据剪切到原始表并返回影响行数,如果在临时表中操作失败,将临时表中的相关数据删掉,并返回错误码


2.spring中的事物

 通过AOP配置进行配置

声明式事物配置,事物传播、隔离级别、回滚条件


spring传播级别(TransactionDefinition中定义):

PROPAGATION_REQUIRED:如果上下文中存在事物则加入到该事物,否则新建事物

PROPAGATION_SUPPORTS:上下文后事物则加入,没有则使用非事物处理

PROPAGATION_MANDATORY:要求上下文必须有事物否则抛异常

DEFAULT:使用数据库默认级别

PROPAGATION_REQUIRES_NEW:每次都新建事物,将上下文事物挂起执行完后再恢复上下文事物

PROPAGATION_NOT_SUPPORTED:不支持事物,上下文存在事物挂起,执行完本操作再执行上下文事物

PROPAGATION_NEVER:上下文中不能存在事物,否则抛RuntimeException

PROPAGATION_NESTED:嵌套在上下文的事物中做为子事物,如果没有则新建。父事物失败子事物也会失败,子事物失败父事物回滚到子事物执行前记录的SavePoint继续执行 。


spring 隔离级别:

ISOLATION_DEFAULT:默认隔离级别,使用数据库的默认隔离级别。

ISOLATION_READ_UNCOMMITTED:允许其他事物读取到未提交的数据,会产生脏读、不可重复读、幻读

ISOLATION_READ_COMMITTED:保证并行事物提交后的才能被其他事物读到,避免了脏读。大多数数据库默认级别

ISOLATION_REPEATABLE_READ:保证一个事物不会修改另一个事物获取的数据,避免了脏读、不可重复读

ISOLATION_SERIALIZABLE:最严格、代价最大,事物按照顺序串行执行