定义数据库和实例
数据库:物理操作系统文件或其他形式文件类型的集合。
数据库实例:MySQL 数据库由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。数据库实例才是真正用于操作数据库文件的。( MySQL 被设计为一个单进程多线程架构的数据库,MySQL 数据库实例在系统上的表现就是一个进程)
MySQL 配置文件位置
当启动实例时,MySQL 数据库会去读取配置文件(配置文件中有一个参数 datadir,该参数指定了数据库所在的路径),根据配置文件的参数来启动数据库实例。可以通过以下命令查找配置文件位置:
Linux 环境下:# mysql --help | grep my.cnf
Window 环境下,cmd(命令提示符):> mysql -- help
MySQL 由以下基本部分组成:
- 连接池组件
- 管理服务和工具组件
- SQL接口组件
- 查询分析器组件
- 优化器组件
- 缓冲(Cache)组件
- 插件式存储引擎(注意:存储引擎是基于表的, 而不是数据库)
- 物理文件
MySQL存储引擎
可以通过 SHOW ENGINES 语句查看当前使用的 MySQL 数据库所支持的存储引擎,也可以通过查找 information_schema 架构下的 ENGINES 表。
InnoDB 存储引擎:InnoDB 存储引擎支持事务,主要面向在线事务处理(OLTP)的应用。特点是行锁设计、支持外键,支持非锁定读(默认读取操作不会产生锁)。
MyISAM 存储引擎:MyISAM 存储引擎不支持事务、表锁设计,支持全文索引,主要面向一些 OLAP 数据库应用。此外,MyISAM 存储引擎的另一个与众不同的地方是它的缓冲只缓存(cache)索引文件,而不缓冲数据文件。
NDB 存储引擎:NDB 存储引擎是一个集群存储引擎。特点是数据全部放在内存中,因此主键查找(primary key lookups)的速度极快,并且通过添加 NDB 数据存储节点 (Data Node)可以线性地提高数据库性能,是高可用、高性能的集群系统。
Memory 存储引擎:Memory 存储引擎将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。它非常适合用于存储临时数据的临时表,以及数据仓库中的维度表。Memory存储默认使用哈希索引,且只支持表锁,并发性能较差,并且不支持 TEXT 和 BLOB 列类型。
Archive 存储引擎:Archive 存储引擎只支持 INSERT 和 SELECT 操作,支持索引。Archive存储引擎使用zlib算法将数据行(row)进行压缩后存储,压缩比一般可达 1:10。Archive 存储引擎非常适合存储归档数据,如日志信息。Archive 存储引擎使用行锁来实现高并发的插入操作,但是其本身并不是事务安全的存储引擎,其设计目标主要是提供高速的插入和压缩功能。
Federated 存储引擎:Federated存储引擎表并不存放数据,它只是指向一台远程 MySQL 数据库服务器上的表。
Maria 存储引擎:设计目标主要是用来取代原有的 MyISAM 存储引擎。特点是:支持缓存数据和索引文件,应用了行锁设计,提供了 MVCC 功能,支持事务和非事务安全的选项,以及更好的 BLOB 字符类型的处理性能。
其他存储引擎:MySQL 数据库还有很多其他的存储引擎,包括 Merge、CSV、Sphinx 和 Infobright。
MySQL 存储引擎比较内容用于学习笔记,资料来源:
MySQL 技术内幕:InnoDB 存储引擎 / 姜承尧著. --2版. --北京:机械工业出版社,2013.6(数据库技术丛书)
同时可参考:MySQL官方文档
网友评论