第一章、mysql体系结构与存储引擎
1、定义数据库和实例
数据库:物理操作系统文件或其他形式文件类型的集合
数据库实例:有数据库后台进程/线程以及一个共享内存区组成。
共享内存可以被运行的后台进程/线程所共享。
数据库实例是真正用来操作数据库文件的
MySQL被设计问一个单进程多线程架构的数据库
2、mysql体系结构
MySQL由以下几部分组成:
1、连接池组件
2、管理服务和工具组件
3、SQL接口组件
4、查询分析器组件
5、优化器组件
6、缓冲(Cache)组件
7、插件式存储引擎
8、物理文件
插件式体系结构是MySQL独有的,并且存储引擎是MySQL区别于其他数据库的一个最重要特性。存储引擎是基于表的,而不是数据库。
存储引擎的好处:每个存储引擎有各自的特点,可根据不同的应用建立不同的存储引擎表。
3、MySQL表存储引擎
InnoDB存储引擎
默认的存储引擎,主要面向OLTP(联机事务处理,面向基本的、日常的事务处理)
特点:
支持事务,支持外键、支持行锁(有的情况下也会锁住整个表)、非锁定读(默认读取操作不会产生锁)
通过使用MVCC(多版本并发控制)来获取高并发性,并且实现sql标准的4种隔离级别,默认为可重复读(repeatable)级别
使用一种被称成next-key locking的策略来避免幻读(phantom)现象
还提供了插入缓存(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能高可用技术。
表数据采用聚集方式,每张表的存储都按主键的顺序进行存放。如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键
MyISAM存储引擎:
不支持事务、支持全文索引,表锁设计,主要面向一些OLAP(联机分析处理,数据仓库的主要应用)。
它的缓冲池只缓冲索引文件,而不缓冲数据文件.
该存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件.
NDB:
是一个集群存储引擎,其特点是数据全部放在内存中。
因此主键查找速度极快,并通过添加NDB数据库存储节点可以线性提高数据库性能,是高可用,高性能的集群系统。
Memory:
将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。
它非常适合存储临时数据的临时表.默认采用哈希索引。
只支持表锁,并发性较差。