Mysql 体系结构和存储引擎
数据库:物理操作系统文件或其他形式文件内容的集合;
数据库实例:有数据库后台进程/线程记忆一个共享内存区组成;
Mysql数据库在没有配置文件的情况下,会按照编译时的默认参数设置启动实例;mysql 按照/etc/my.cnf->/etc/mysql、my.cnf->/usr/local/mysql/etc/my.cnf->~/etc/my.cnf来读取配置项,以读取到的最后一个配置文件中的参数为准;
Mysql体系架构
Mysql区别于其他数据库的最重要特定就是其插件式的存储引擎。
存储引擎是基于表的,而不是数据库;
Mysql表存储引擎:
innodb存储引擎:支持事务,主要面向oltp(online transaction processing)、行锁、支持外键、非锁定读,通过多版本并发控制(MVCC)来获得高并发性、默认采用repeaable级别(可重复读),通过next-keylocking策略避免幻读、插入缓冲、二次写、自适应哈希索引、预读 。表中数据的存储采用聚集的方式,每张表的存储都按主机的顺序存储,如果没有显式地在表定义中指定主键,InnoDB存储引擎会为每一行生成一个6字节的Rowid,以此为主键。
myisam存储引擎: 不支持事务、表锁、全文索引、适合olap(在线分析处理),其中myd:放数据文件,myi:放索引文件
ndb存储引擎:集群存储引擎,share nothing,数据全放在内存(从5.1版本开始,非索引数据可放在磁盘),添加NDB数据存储结点可以线性提高数据库性能,高可用性,高性能
不足:JOIN操作是在mysql数据库层完成,而不是存储引擎层完成的;复杂的连接操作需要巨大的网络开销,查询速度很慢。
memory存储引擎: 数据存放在内存中,表锁,并发性能差,默认使用哈希索引
archive存储引擎:只支持insert和select zlib算法压缩1:10,适合存储归档数据如日志等、行锁
maria存储引擎:目的取代myisam、缓存数据和索引、行锁、mvcc
各种存储引擎之间的比较: