mysql的体系架构和存储引擎

时间:2024-09-20 00:07:32

定义数据库和实例

数据库:物理操作系统的文件或其他形式文件类型的集合。在mysql数据库中,数据库文件可以是frm、MYD、MYI、ibd结尾的文件。

实例:MySQL数据库由后台线程以及一个共享内存组成。共享内存可以被运行的后台线程所共享。数据库实例才是真正用于操作数据库文件的。

数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件

用户对数据库数据的 数据定义、数据查询、数据维护、数据库运行控制等都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。

在MySQL数据库中实例与数据库的关系是一一对应的一个数据库实例对应一个数据库,一个数据库对应一个实例。

MySQL是一个单进程多线程的数据库

MySQL的体系结构

mysql的体系架构和存储引擎

MySQL由一下几部分组成

1:线程连接池

2:SQL查询接口

3:查询分析器(进行词法分析,语义分析)

4:优化器(用来选择最优的语法生成树)

5:缓存 (缓存有两个用处,1:缓存线程 2:缓存查询结果)

6:插件式存储引擎

7:数据记录即文件(保存在磁盘)

需要注意的是存储引擎是基于表的,而不是基于库的

MySQL的存储引擎

InnoDB存储引擎

InnoDB存储引擎支持事务,设计目标主要面向在线事务处理(OLTP)其特点是行锁设计、支持外键、非锁定读、InnoDB引擎将数据放在一个逻辑的表空间中

表空间分为共用表空间(ibdata1 回滚信息(undo),插入缓冲索引页、系统事务信息,二次写缓冲)和独立表空间(.ibd结尾的文件该文件主要用来放数据和索引)

InnoDB使用多版本并发(MVCC)来获取高并发性 select不会对行记录加锁

MySQL实现了SQL标准的4种隔离级别(read uncommited, read commited、repeated read 、serializalable)

MySQL默认为 repeated read 同时使用next-key locking 锁来避免幻读(Recoder lock+Gap lock=next-key locking)

InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(使用InnoDB引擎如果对某些数据操纵频繁InnoDB会自动添加哈希索引)

预读 (提前将数据页加载到内存缓冲)

对于表中数据的存储,InnoDB存储引擎采用了聚集索引的方式、每张表的存储都是按主键的顺序进行存放。如果没有显示的在表定义时指定主键,InnoDB存储引擎会为

每一行生成一个6字节的ROWID,并以此为主键。

MyISAM 存储引擎

MyISAM存储引擎不支持事务、表锁设计、支持全文索引,主要面向一些OLAP数据库 、缓冲池只缓存索引文件,而不缓冲数据文件。

MyISAM存储引擎表 由MYD、MYI、frm 组成MYD用来存放数据文件,MYI用来存放索引文件

Maria存储引擎

Maria设计目标主要是用来取代原有的MyISAM存储引擎 Maria存储引擎的特点是:支持缓存数据和索引文件,应用了行锁设计,提供了MVCC功能,支持事务和非事务安全的选项

以及更好的BLOB字符类型的处理

连接MySQL

连接MySQL操作是一个连接进程和MySQL数据库实例进行通信 MySQL本质上是通过进程进行通信,常用的进程通信方式有管道、命名管道、命名子、tcp/ip套接字

unix域套接字

TCP/IP套接字方式是MySQL数据库在任何平台下都提供的连接方式,也是网络中使用最多的一种方式 client和server进行连接 连接成功后会这个连接看作一个mysql连接线程

一个线程中可以有多个回话

unix域套接字在linux和unix环境下,还可以使用unix域套接字,unix套接字不是一个网络协议。只能在MySQL客户端和数据库实例在同一台服务器上的情况下使用,用户

可以在配置文件中指定套接字文件的路径。