普通事务

65 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

普通事务

概念

事务处理 指的是 用户定义的一个数据库操作序列,这些操作要么都做,要么都不做,任何一个操作执行失败都将导致整个的事务操作失败。是一个不可分割的工作单位。 SQL语句是以行为单位执行。所以一个事务,往往是多条SQL语句需要执行。 另外需要注意:在 mysql 中只有使用了 Innodb 存储引擎的表才支持事务。

特性(ACID)

  • 原子性(Atomicity):原子性是指 事务中包含的所有操作要么全部成功,要么全部失败回滚。
  • 一致性(Consistency):一致性是指 事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。也就是说 在数据操作的前后,数据库的数据没有被改变,直到事务提交。
  • 隔离性(Isolation):隔离性是 当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
  • 持久性(Durability):持久性是指 一个事务一旦被提交了,就不能再回滚了,已经把数据保存到数据库当中了。

事务隔离级别

Read uncommitted:就是一个事务可以读取到另一个未提交事务的数据 Read committed:一个事务要等另一个事务提交后才能读取数据 Repeatable read:就是在开始读取数据(事务开启)时,不再允许修改操作 Serializable:在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读

MySQL的默认隔离级别是Read Repeatable

事务隔离级别脏读不可重复读幻读
Read uncommitted
Read committed
Repeatable read
Serializable

分布式事务

分布式事务概念

分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务。简言之:跨jvm进程产生分布式事务。分布事务问题也叫分布式数据一致性问题:在分布式场景中保证多个节点数据的一致性。

CAP理论

  • 一致性(Consistency):对于客户端的每次读操作,要么读到的是最新的数据,要么读取失败。换句话说,一致性是站在分布式系统的角度,对访问本系统的客户端的一种承诺:要么我给您返回一个错误,要么我给你返回绝对一致的最新数据,不难看出,其强调的是数据正确。
  • 可用性(Availability):任何客户端的请求都能得到响应数据,不会出现响应错误。换句话说,可用性是站在分布式系统的角度,对访问本系统的客户的另一种承诺:我一定会给您返回数据,不会给你返回错误,但不保证数据最新,强调的是不出错。
  • 分区容忍性(Partition Tolerance):由于分布式系统通过网络进行通信,网络是不可靠的。当任意数量的消息丢失或延迟到达时,系统仍会继续提供服务,不会挂掉。换句话说,分区容忍性是站在分布式系统的角度,对访问本系统的客户端的再一种承诺:我会一直运行,不管我的内部出现何种数据同步问题,强调的是不挂掉。

CAP理论说一个分布式系统不可能同时满足C、A、P这三个特性。那么我们就来分析C、A、P的权衡吧。

对于一个分布式系统而言,P是前提,必须保证,因为只要有网络交互就一定会有延迟和数据丢失,这种状况我们必须接受,必须保证系统不能挂掉。所以只剩下C、A可以选择。要么保证数据一致性(保证数据绝对正确),要么保证可用性(保证系统不出错)。

当选择了C(一致性)时,如果由于网络分区而无法保证特定信息是最新的,则系统将返回错误或超时。

当选择了A(可用性)时,系统将始终处理客户端的查询并尝试返回最新的可用的信息版本,即使由于网络分区而无法保证其是最新的。

BASE理论

BASE理论是由于CAP中一致性和可用性不可兼得而衍生出来的新的思想。BASE理论的核心思想是:通过牺牲数据的强一致性来获得高可用。

基本可用(Basically Available)

指分布式系统在出现故障时,允许损失部分的可用性来保证核心可用;

软状态(Soft state)

指允许分布式系统存在中间状态,该中间状态不会影响到系统的整体可用性;

最终一致性(Eventual consistency)

指分布式系统中的所有副本数据经过一定时间后,最终能够达到一致的状态; 在互联网产品中,大部分都回采用BASE理论来实现数据的一致性,因为产品的可用性对于用户来说更为重要。

一致性模型

强一致性

数据更新成功后,任意时刻所有副本中的数据都是一致的,一般采用同步的方式实现。

弱一致性

数据更新成功后,系统不承诺立即可以读到最新写入的值,也不承诺具体多久之后可以读到。

最终一致性

弱一致性的一种形式,数据更新成功后,系统不承诺立即可以返回最新写入的值,但是保证最终会返回上一次更新操作的值。

若有收获,就点个赞吧