Mysql体系架构

MySQL由以下几部分组成
- 连接池组件
- 管理服务和工具组件
- SQL接口组件
- 查询分析器组件
- 优化器组件
- 缓冲( Cache)组件
- 插件式存储引擎
- 物理文件
ps : 存储引擎是基于表的,不是基于数据库
常见的mysql引擎
InnoDB存储引擎
从 MySQL数据库5.5.8版本开始, InnoDB存储引擎是默认的存储引擎。
- InnoDB存储引擎支持事务
- 其特点是行锁设计、支持外键
- InnoDB通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的四种隔离级别,默认为 REPEATABLE级别。同时使用next-key locking的的略避免幻读问题。
- 对于表中数据的存储, InnoDB存储引擎釆用了聚集( clustered)的方式,因此每张表的存储都是按主键的顺序进行存放。
ps 如果没有显式地在表定义时指定主键, InnoDB存储引擎会为每一行生成一个6字节的 ROWID,并以此作为主键。详见mysql03
一旦自增id达到最大值,此时数据继续插入是会报一个主键冲突异常
MyISAM存储引擎
- MyIsAM存储引擎不支持事务、表锁设计
- 支持全文索引
- MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。
ps MyISAM的索引文件和数据文件是分开的,索引是用b+树,叶子节点存的是指向数据的指针
NDB引擎
NDB存储引擎是一个集群存储引擎。
- 数据全部放在内存中(从 MySQL5.1版本开始,可以将非索
引数据放在磁盘上),因此主键查找的速度极快 - 并且通过添加NDB数据存储节点( Data Node)可以线性地提高数据库性能,是高可用、高性能的集群系统。
Memory存储引擎
Memory存储引擎将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。它非常适合用于存储临时数据的临时表,以及数据仓库中的纬度表。 Memory存储引擎默认使用哈希索引。
Maria存储引擎
Maria存储引擎的特点是:
- 支持缓存数据和索引文件
- 应用了行锁设计,
- 提供了MVCC功能
- 支持事务和非事务安全的选项
- 更好的BLOB字符类型的处理性能