存储引擎 0_o

概念:

Mysql中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在mysql中称为存储引擎。存储引擎是mysql将数据存储在文件系统中的存储方式或者存储格式。存储引擎是mysql数据库中的组件,负责执行实际的数据I/O操作。Mysql系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储。

存储引擎的分类:

Myisam

Mysql5.5之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务。

Myisam不支持事务,也不支持外键约束,只支持全文索引,数据文件和索引文件是分开保存的。访问速度快,对事务完整性没有要求。Myisam适合查询,插入为主的应用。Myisam在磁盘上存储成三个文件,文件名和表名都相同,但是扩展名分别为:.frm文件存储表结构的定义;数据文件的扩展名为.MYD;索引文件的扩展名是.MYI

特点:

表级锁定形式,数据在更新时锁定整个表;数据库在读写过程中相互阻塞;串行操作,按照顺序操作,每次在读或在写的时候会把全表锁起来;也会在数据读取的过程中阻塞用户的数据写入数据单独写入或读取,速度过程较快且占用资源相对少;会在数据写入的过程阻塞用户数据的读取。

特性:

数据单独写入或读取,速度过程较快且占用资源相对少。

Myisam是表级锁定,读或写无法同时进行。好处是分开执行时,速度快、资源占用相对较少。

表级锁:

表级锁是数据库管理系统中用于并发控制的一种机制,它作用于整个数据表,而不是表中的单行或多行。当一个事务对表施加了表级锁之后,其他事务将无法对该表进行写入数据(排它锁),或者在某种情况下也无法进行读取操作(共享锁),直到第一个事务释放表级锁为止。

特点:

  1. 锁定力度较粗2.易于管理3.并发性能受限4.适用场景

Myisam表支持3种不同的存储格式:

静态表:

静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。

动态表:

动态表包含可变字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新,删除记录会产生碎片,需要定期执行optimize table语句或myisamchk -r命令来改善性能,并且出现故障的时候恢复相对比较困难。

压缩表:

压缩表有myisamchk工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。

Myisam使用的生产场景:

公司业务不需要事务的支持;单方面读取或写入数据比较多的业务;myisam存储引擎数据读写都比较频繁场景不适合;使用读写并发访问相对较低的业务;数据修改相对较少的业务;对数据业务一致性要求不是非常高的业务;服务器硬件资源相对比较差。

Myisam:适合于单方向的任务场景,同时并发量不高,对于事务要求不高的场景。

Innodb存储引擎:

支持事务,支持4个事务隔离级别;行级锁定,但是全表扫描仍然会是表级锁定;mysql5.5版本开始,默认的存储引擎为innodb;读写阻塞与实物隔离级别相关;能非常高效的缓存索引和数据;表与主键以组的方式存储btree;支持分区,表空间,类似oracle数据库;支持外键约束,5.5前不支持全文索引,5.5后支持全文索引;对硬件资源要求还是比较高的场合。

注意:使用like进行模糊查询时,会进行全表扫描,锁定整个表;对没有创建索引的字段进行查询,也会进行全表扫描锁定整个表;使用索引进行查询,则是行级锁定。

行级锁:

行级锁是一种更细粒度的锁定机制,它是数据库管理系统为了实现并发控制而在行级别上进行的锁定。与表级锁不用,行级锁只针对特定行数据进行锁定,不影响其他行的操作,这样可以极大地提高多用户环境下数据库的并发能力和效率。

特点:

  1. 精细控制2.高并发性3.资源消耗4.死锁可能性5.典型使用场景

mysql等关系型数据库中,innodb存储引擎支持行级锁定,而myisam存储引擎则支持表级锁定。

死锁:

死锁是指在并发环境下,两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象,使得事务无法继续执行下去。每个事务都在等待对方释放自己所需的资源,因此陷入僵局,无法向前推进。

  1. 资源争抢:多个事务同时要求获取已经被其他事务锁定的资源(如行级锁,表级锁等)。
  2. 循环等待:事务间形成了一个等待链条,A事务等待B事务释放资源,B事务又在等待C事务释放资源,而C事务可能又在等待A事务释放资源,这就构成了一个循环等待。
  3. 预防死锁:通过限制事务的加锁顺序或一次性申请所有需要的锁等方式来防止死锁的放生。
  4. 检测并解除死锁:周期性检查是否存在死锁,并通过撤销其中一个或多个事务来打破死锁环路。
  5. 超时等待:设置锁请求的超时时间,超过这个时间还没有获取到锁的事务将会自动回滚或重新尝试。

Innodb适用的生产场景:

业务需要事务的支持;行级锁定对高并发有很好的适应能力,但需确保查询时通过索引来完成;业务数据更新较为频繁的场景;业务数据一致性要求较高;硬件设备内存较大,利用innodb较好的缓存能力来提高内存利用率,减少磁盘io的压力。

Myisaminnodb的区别:

Innodb支持事务,而myisam不支持事务

Innodb支持行级锁,而myisam支持表级锁

Innodb支持mvcc,而myisam不支持

Innodb支持外键,而myisam不支持

Innodb支持全文索引,而myisam支持

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值