一 MYSQL体系结构简介
MYSQL的体系结构可以分为四个层级,从上往下依次为:
1. 连接层:
最上层为客户端以及一些连接服务,包含连接操作,例如JAVA想要与MYSQL建立连接就需要用到JDBC,PHP语言与Python也可以连接到MYSQL,建立连接。连接层主要用于完成一些连接处理,例如用户校验,账号密码是否正确,以及对应的授权认证,对于用户的权限管理。服务器也会为安全接入的每一个客户端验证其所具有的操作权限。
2. 服务层:
第二层架构服务层是MYSQL大多数核心服务完成的层级,例如SQL接口,完成缓存的查询,以及对于SQL的分析和优化,以及跨存储引擎的功能(包括过程,函数等)。
3. 引擎层:
引擎层包含了多个引擎,例如InnoDB, MyISAM, Memory, NDB, Archive等,引擎层我们可以将其简单的理解为一个可插拔式的存储引擎,我们需要哪一个存储引擎直接进行选择即可,如果这个存储引擎当中没有我们当前需要的,我们甚至还可以自定义存储引擎进行使用。还需要注意的一点是,存储引擎实际上就是一种存储方式,索引的实现就是在引擎当中实现的,那就是说各个存储引擎之间其实是不一样的,根据我们的需要进行选取即可。MYSQL自5.5之后,默认的就是InnoDB引擎。
4. 存储层:
存储层当中用来存放我们对应数据库中的详细信息,主要是讲数据存储在文件系统之上,并且完成与存储引擎之间的交互。
二 3种存储引擎特点
MYSQL支持多种存储引擎,在MYSQL查看当前支持的存储引擎,只需要输入
show engines
即可查看对应的存储引擎,这里我们也能发现,InnoDB是默认的存储引擎,支持事务,VA连接 ,行级锁等
并且在这些存储引擎当中,我们发现只有InnoDB支持事务,即为事务性存储引擎。
1. InnoDB
1>特点:
DML(对于表当中的数据进行增删改等操作)操作遵循ACID(原子性,隔离性,持久性,一致性)模型,并且支持事务
支持行级锁,能够大大提高并发访问量
之处外键Foreign Key约束,加强表与表之间的关联,保证相关联的数据的完整性和一致性。
2>磁盘文件
所有使用InnoDB引擎的表都会对应一个xxx.ibd的文件,xxx代表对应的表名,内部存储对应表的结构(frm, sdi)以及数据,索引等。对应存在一个参数 innodb_file_per_file 看名字可以知道,这个参数是决定对应是多张表当中的数据存储在一个文件当中,还是一个表对应一个InnoDB引擎的表张文件,MYSQL默认将此参数默认设置为TRUE。此外,还需要注意的一点是,存储引擎实际是针对表张的,也就是说一个数据库当中其实可以有存在多个不同引擎的表。
2.MyISAM
1>特点:
MyISAM是MYSQL早期的默认存储引擎,其特点是:
不知处事务,不支持外键
支持范围比较大的表锁,但是不支持行锁
访问速度相比较于InnoDB更快
2>文件
MyISAM的数据的保存主要依靠三个文件
xxx.sdi:存储表结构信息
xxx.MYD:存储表的数据信息
xxx.MYI:存储表的索引
3.Memory
1>特点:
Memory引擎的表数据是临时存储在内存当中的,存储在内存当中的数据就会受到对应硬件的影响,一旦断电或者其他情况导致内存数据清空,那么对应的数据就会丢失,因此其只能将这些表当作是临时表,或者是一种缓存进行使用。
此外,其之处hash索引。扩展: 一些索引引擎不选用HASH作为索引,实际上是因为其没有办法做到范围查询,我们如果想要一次性的查询多个数据,依据一个范围条件查询。这个时候HASH所以就无法做到,依旧只能够一条一条进行查询,大大降低了查询效率。
2>文件:
文件存储上,因为其内容实际上都是存储在内存当中的,所以本地文件仅仅保留了对应的表结构 xxx.sdi
三种存储引擎异同点总结