转自: mysql技术内幕:innodb存储引擎(非常棒的一本书)
【1】mysql体系结构和存储引擎
【1.2】mysql体系结构
1)mysql数据库实例在系统上的表现就是一个进程;
2)数据库与数据库实例的区别:
数据库是文件的集合,是根据某种模型组织文件并其存放在二级存储器中的数据集合;
数据库实例是程序,用户对数据库文件的增删改查都是通过数据库实例程序去完成的;
更贴切地说:数据库是由一个个文件组成的(二进制文件),要对这些文件进行增删改查操作不能通过简单的文件操作来实现,需要通过数据库实例来完成;
【1.3】存储引擎
1)mysql数据库区别于其他数据库的一个最重要的特点是: 有插件式的表存储引擎;
2)存储引擎是基于数据库表而不是基于数据库的;所以不同的数据库表可以使用不同的存储引擎,尽管这些表都属于同一个数据库;
3)存储引擎分类:
3.1)innodb存储引擎:
a.innodb存储引擎支持事务,设计目标主要面向 OLTP(online transaction processing,联机事务处理)的应用。特点是行锁设计,支持外键,并支持非锁定度,即默认读数据不会产生锁;
b.默认隔离级别是 READ REPEATABLE 可重复读级别(RR);mysql默认隔离级别是 READ COMMITTED 可提交读(RC);
c.之外, innodb还提供了 插入缓存(insert buffer), 二次写(double write), 自适应哈希索引(adaptive hash index), 预读(read ahead)等高性能和高可用的功能;
d.innodb 采用 聚集cluster存储方式, 故每张表的存储都是按照主键的顺序进行存放的;
3.2)MyISAM 存储引擎:
a.myisam 不支持事务,表锁设计, 支持全文索引, 主要面向OLAP 数据库应用;(online analysis processing, 联机分析处理)
b.myisam 的缓冲池只 缓存索引文件,不缓存数据文件;
3.3)NDB 存储引擎:集群存储引擎, NDB == network database 网络数据库, ndb 是基于mysql集群的分布式数据库系统;
a.ndb的所有数据都放在内存中;
3.4)Memory 存储引擎: 内存存储引擎
a.memory 将表中数据存放在内存中, 如果数据库发生崩溃或重启,表中的数据将会丢失;
b.memory默认使用哈希索引,不是B+索引;
3.5)Archive 存储引擎:
a.archive 只支持 insert 和 select 操作;
b. archive 非常适合存储归档数据, 如日志信息;
3.6)Federated 存储引擎:
a. Federated 存储引擎表并不存放数据, 它只是指向一台远程mysql 数据库服务器上的表;
3.7)Maria 存储引擎:
a.Maria设计目标是取代 MyISAM 存储引擎,从而成为mysql的默认引擎;
b. Maria 存储引擎的特点:支持缓存数据和索引文件,应用了行锁,提供了MVCC功能, 支持事务和非事务安全的选项, 以及更好的blob 字符类型的处理性能;