第1章 MySQL体系结构和存储引擎

第1章 MySQL体系结构和存储引擎


1.1 定义数据库和实例

数据库:物理操作系统文件或其他形式文件类型的集合。在MySQL中,数据库文件可以是frm,myi,ibd结尾的文件。当使用NDB引擎时,数据库的文件可能不是操作系统上的文件,而是位于内存之中。
数据库实例:由数据库后台进程/线程以及一个共享内存区组成。数据库实例才是真正用来操作数据库文件的。

从概念上讲,数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;数据库实例是应用程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。

MySQL是一种单进程多线程架构的数据库,即,MySQL数据库实例在系统上的表现就是一个进程。

在Linux操作系统中启动MySQL数据库实例,命令如下:
[root@xen-server bin]# ./mysqld_safe &
当启动实例时,MySQL数据库会去读取配置文件,根据配置文件的参数来启动数据库实例。在MySQL数据库中,可以没有配置文件,在这种情况下,MySQL会按照编译时的默认参数设置启动实例。
查看MySQL数据库实例启动时,它会在哪些位置查找配置文件:
[root@xen-server bin]# ./mysql --help | grep my.cnf
如果多个配置文件有相同的参数,那么MySQL会以读取到最后一个配置文件中的参数为准。在Linux环境下,配置文件一般放在/etc/my.cnf下。
配置文件中有一个datadir参数,该参数指定了数据库所在的路径。在Linux操作系统下,datadir默认为/usr/local/mysql/data。其实data目录是一个链接,该链接指向了/opt/mysql_data目录。

1.2 MySQL体系结构

在这里插入图片描述
MySQL区别于其他数据库的最重要的特点就是其插件式的存储引擎。存储引擎是底层物理结构的实现。存储引擎是基于表的,而不是数据库。

1.3 MySQL表存储引擎

MySQL的核心就是存储引擎。存储引擎的好处就是每个存储引擎都有各自的特点,能够根据具体的应用建立不同的存储引擎表。

  1. InnoDB存储引擎

InnoDB存储引擎支持事务,主要面向在线事务处理(OLTP,Online Transaction Processing)方面的应用。其特点是行锁设计、支持外键,并支持非锁定读,即默认情况下读取操作不会产生锁。
InnoDB存储引擎将数据放在一个逻辑的表空间中。这个表空间将每个InnoDB存储引擎的表单独存放到一个独立的ibd文件中。InnoDB存储引擎使用裸设备(row disk)建立其表空间。
InnoDB通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4种隔离级别,默认为REPEATABLE级别。同时使用一种称为next-key locking的策略来避免幻读(phantom)现象的产生。InnoDB存储引擎还提供插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。
对于表中数据的存储,InnoDB存储引擎采用了聚集(clustered)的方式。每张表的存储都按主键的顺序存放,如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。

  1. MyISAM存储引擎

MyISAM存储引擎是MySQL官方提供的存储引擎。其特点是不支持事务、表锁和全文索引,对于一些OLPA操作速度快。
MyISAM存储引擎表由MYD和MYI组成。MYD用来存放数据文件,MYI用来存放索引文件。可以通过使用myisampack工具来进一步压缩数据文件,使用myisampack工具压缩后的表是只读的,当然也可以使用这个工具解压数据文件。

对于MyISAM存储引擎表,MySQL数据库只缓存其索引文件,数据文件的缓存交由操作系统本身来完成。

  1. NDB存储引擎

NDB存储引擎是一个集群存储引擎,其结构是share nothing的集群架构,因此能提供更高级别的高可用性。NDB的特点是数据全部放在内存中,因此主键查找(primary key lookup)的速度极快,并且通过添加NDB数据存储节点(Data Node)可以线性地提高数据库性能,是高可用、高性能的集群系统。
NDB存储引擎的连接操作(JOIN)是在MySQL数据库层完成的,而不是在存储引擎层完成的。这意味着,复杂的连接操作需要巨大的网络开销,因此查询速度很慢。

  1. Memory存储引擎

Memory存储引擎(HEAP引擎)将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。它非常适合用于存储临时数据的临时表,以及数据仓库中的纬度表。它默认使用哈希索引。

  1. Archive存储引擎

Archive存储引擎只支持INSERT和SELECT操作,5.1开始支持索引。其使用zlib算法将数据行(row)进行压缩后存储,Archive存储引擎非常适合存储归档数据,如日志信息。Archive存储引擎使用行锁来实现高并发的插入操作,但是本身并不是事物安全的存储引擎,其设计目标主要是提供高速的插入和压缩功能。

  1. Federated存储引擎

Federated存储引擎并不存放数据,它只是指向一台远程MySQL数据库服务器上的表。Federated存储引擎只支持MySQL数据库表,不支持异构数据库表。

  1. Maria存储引擎

Maria存储引擎是新开发的引擎,设计目标主要是用来取代原有的MyISAM存储引擎,从而成为MySQL的默认存储引擎。其特点是,缓存数据和索引文件,行锁设计,提供MVCC功能,支持事务和非事务安全的选项支持,以及更好的BLOB字符类型的处理性能。

  1. 其他存储引擎

Merge、CSV、Sphinx和Infobright等。

1.4 连接MySQL

连接MySQL操作是连接进程和MySQL数据库实例进行通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值