mysql 的储存引擎、 事务、以及对MVCC的理解

mysql 的储存引擎、 事务、以及对MVCC的理解

在这里插入图片描述

通过 show engines可以查看MySQL所有的引擎

一、innoDB

Mysql5.5以后默认使用引擎,具有以下特性

  1. 灾难回复性好
  2. 支持事务
  3. 使用行级锁(table-level locking)
  4. 支持外键关联
  5. 支持热备份

二、MylSAM

MylSAM 特性如下:

  1. 不支持事务
  2. 使用表级锁(row-level locking),并发性能差
  3. 容易损坏,灾难性恢复差
  4. 不支持外键关联

三、事务(ACID)

可以理解为对数据的一系列操作,操作本身为一个整体,要么执行,要么不执行

事务具有以下几个特性:

  1. 原子性(Atomicity):事务执行的最小单位,不可分割,保障了事务的操作要么完成,要么失败。
  2. 一致性 (Consistency):事务操作完成前后数据是一致的。
  3. 隔离性(Isolation):并发访问数据库时,不同事务之间时互不干扰的。
  4. 持久性(Durability):当事务提交以后,数据的改变是持久的。

四、事务的实现原理

MySQL InnoDB 引擎 使用 redo log (重要日志) 保证事务的持久性,使用undo log(回滚日志) 保证事务的原子性

通过 锁机制 MVCC 来保证事务的隔离性。(默认隔离级别为 REPEATABLE-READ

在原子性、隔离性、持久性、得到保障之后,事务一致性才能得到保障

五、事务的并发问题

当数据库中的某一条数据被多个线程同时访问时,会引发以下几个问题:

  1. 脏读**(Dirty read)**:当一个事务访问数据库并修改了数据时,此时数据并未提交,当另一个事务操作数据库中的这条数据时

    拿到的是并未提交的修改数据所引发的的问题即为脏读

  2. 幻读**(Phantom read)**:事务一读取数据同时事务二插入数据,再查询数据 时发现本不存在的数

  3. 不可重复读**(Unrepeatable read)**:事务一多次读取数据时,事务二访问并修改该数据,导致多次读取的数据不一致

  4. 数据丢失**(Lost to modify)**:事务一读取数据的同时,数据二也访问了该数据,两个事务同时对数据进行修改导致事务一

    数据发生丢失 丢失

六、事务的隔离级别

  1. READ-UNCOMMITTED(读取未提交): 最低的事务级别,允许读取未提交的数
  2. READ-COMMITTED(读取已提交): 允许读取并发事务以提交的数据
  3. REPEATABLE-READ(可重复读): 对同一字段多次读取的数据是一致的
  4. SERIALIZABLE(可串行化): 最高的隔离级别,完全服从AICD的隔离级别,所有事务同步执行

七、对MVCC(Multi-Version Concurrency Control)的理解

多版本并发控制技术,是用用来控制并发的一种技术,一般使用在数据库的管理系统中,用来实现对数据库的并发

访问,可以根据事务的隔离情况去判断版本情况进行数据的并发,控制隔离。

可以从三种并发场景来进行解释:

  1. 读和读的并发
  2. 读和写的并发
  3. 写和写的并发

读和读不会造成任何并发问题

读写并发可能会对数据库造成隔离性问题,会出现脏读、幻读、以及不可重复读等问题

写和写的并发会造成数据丢失问题

mvcc 是可以解决这种并发安全问题的多版本并发控制技术,通过数据库中的隐式字段

undo 日志 和read view 来实现的 主要解决三个问题:

  1. 读写并发阻塞问题,提高数据库的并发处理能力

  2. 采用乐观锁,降低了死锁出现的概率

  3. 解决一致性读的问题,事务启动时根据某个条件读取数据,直到事务结束的时候再去执行相同的条件,

    所读到的数据还是同一份数据,数据不会发生改变

使用MVCC时需要根据具体的业务场景来选择自由组合搭配乐观锁跟悲观锁,在这个两个组合中MVCC用来

解决读写冲突,乐观锁或者悲观锁用来解决写和写的冲突,最大程度的去提高数据的并发性能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值