MySQL 一.体系结构和存储引擎

MySQL 一.体系结构和存储引擎

MySQL 被设计成一个可以移植的数据库,可以在几乎所有主流的操作系统上运行,如Windows,Linux,MacOS,FreeBSD;其内部底层的实现方式因为操作系统的不同而有不同的实现,但是保证了在各个平台的物理体系结构一致性。怎么理解这个物理体系结构呢?,就是说很多概念性的东西都是有的,就是底层的实现方式不一致;比如数据库文件袋额存储结构,线程的配置,内存的配置等。

1.1 数据库和实例

数据库:物理操作文件的集合,一般常用的文件后缀是ibd,frm,myd,myi 等;在或者是ndb的引擎保存在内存的数据库文件,也是属于数据库;

实例:MySQL数据库实例是有后台线程和内存组成,内存被后台进程共享;操作数据库文件的是数据库实例(后台线程)

MySQL设计成是一个单进程多线程的程序;数据库和实例通常是一对一的关系,但是在集群的情况下可能是多个实例对应一个数据库;

MySQL在OS里面看到的就是一个进程;

MySQL实例启动的时候,回去根据配置文件去加载配置一般linux文件位置(可能是多个)是/etc/my.cnf windows 的目录是安装目录下的my.ini;其中一个配置熟悉为

datadir		= /home/mysql/data

这个就是数据库(指的是数据库文件)所在的目录;

1.2 数据库的结构体系

用户对数据库的所有操作都是通过数据库实例来进行的;ACID不只是对数据库文件的修改,是需要实例来进行的;下面是MySQL 的架构实现

在这里插入图片描述

可以看见,大概有以下几个模块;

  • 连接池组件:连接池组件,管理和缓冲所有的数据库连接
  • 管理服务和工具 :系统管理和控制
  • SQL接口组件:接收用户SQL命令,返回sql 处理后的结果
  • 查询分析器组件:到分析器会被验证和解析 ,实现是有Lex 和YACC实现 ,主要功能是吧SQL 语句分解成数据结构,后续的处理就是基于这个结构,分析报错的话,就说明这个SQL是不合理的;
  • 优化器组件:SQL查询之前会使用查询优化器,使用 选取-投影-策略 查询
  • 缓存组件 Cache&Buffer:缓冲里面有查询的数据就直接那缓存区的数据
  • 插件式存储引擎:特色功能之一,不同的表可以使用不同的存储引擎
  • 文件系统 :屏蔽底层硬件的功能 对不同的硬件或者系统 写入的文件格式是一致的

MySQL区别与其他服务器是其独有的插件式的表存储引擎;开发者可以自定义自己的存储引擎;注意存储引擎是基于表的,而不是数据库的。

1.3 MySQL 存储引擎

MySQL 的特色是其不同的存储引擎,存储引擎的不同对应于不同的使用场景,对于开发者来说,我们应该深刻的理解到MySQL的核心就在于存储引擎;

1.3.1 InnoDB

支持事务,设计目标就是在线事务处理 online transation process OLTP;行锁设计,支持外键;5.5.8后 是MySQL默认使用的存储引擎;每个表的数据存储一个逻辑的表空间中,对应的一个ibd ;

InnoDB 通过多版本并发控制 multi version concurrency control (MVCC) ,并且实现了SQL 的标准的4种隔离级别;MySQL的默认管理级别是REPEATABLE.同时,使用一种被称为next-key locking 的方式来避免幻读的产生,还使用了BUFFER POOL 来加速读写 ,其中的核心功能insert buffer插入缓冲,double write 二次写 adaptive hash index 自适应哈希索引 read ahead预读;

在这里插入图片描述

表数据的存储采用了聚集 (clustered) 的方式,数据都是按照主键的顺序存储,如果没有主键的时候,会默认的生成一个6字节的ROWID 来作为主键存储

1.3.2 MyISAM 存储引擎

不支持事务

表锁设计(锁的粒度大)

5.5.8 以前是默认的存储引擎; 该引擎的缓冲池只缓存(cache)索引文件,对于数据文件不缓存;

MyISAM引擎的表是由MYD (数据文件)和MYI(索引文件)组成;至于为什么要分成两个文件,可能是因为他的设计只cache 索引文件

注:在缓存池中的索引文件的缓冲区大小最大为4GB

1.3.3 NDB存储引擎

集群存储引擎;添加节点可以线性的提高性能;是一个高性能,高可用的集群系统;

数据全部存在于内存中,5.1后可以把非索引数据放到磁盘上,主键查询非常快

缺点:数据的join 会通过MySQL 数据库再去查询 走了网络,不是引擎层去关联,比较慢

1.3.4 Memory存储引擎

也叫HEAP 存储引擎;数据存储在内存中,机器重启 软件崩溃都会导致数据缺失

使用场景:储存临时数据,默认使用的索引是hash 索引不是B+数索引

表锁设计,不支持TEXT ,BLOB ,varchar 按照char 存储 消费了更多的内存数据

1.3.5 Archive

只支持insert /select 的操作 5.1 后开始支持索引 使用zlib 压缩算法压缩数据,压缩比1:10 ,适合存储日志文件;

设计目标:高速的数据插入功能和压缩功能

1.4 存储引擎比较

在这里插入图片描述

不同的引擎具有不同的性能(存储容量,事务支持,锁的粒度,MVCC,索引支持,备份和复制等),使用的场景,针对适合的场景才能发挥出使用价值;

show engines 可以看到当前MySQL 数据库支持的存储引擎,也可以通过表information_schema.engines 表查询

select * from  information_schema.engines

show engines;
EngineSupportCommentTransactionsXASavepoints
InnoDBDEFAULTSupports transactions, row-level locking, and foreign keysYESYESYES
MRG_MYISAMYESCollection of identical MyISAM tablesNONONO
MEMORYYESHash based, stored in memory, useful for temporary tablesNONONO
BLACKHOLEYES/dev/null storage engine (anything you write to it disappears)NONONO
MyISAMYESMyISAM storage engineNONONO
CSVYESCSV storage engineNONONO
ARCHIVEYESArchive storage engineNONONO
PERFORMANCE_SCHEMAYESPerformance SchemaNONONO
FEDERATEDNOFederated MySQL storage engineNULLNULLNULL

不同的存储引擎对应存储数据后的文件格式是不一样的,同样文件的大小也是不一致的;

1.5 MySQL连接

连接的本质就是通信

.TCP/IP

套接字方式是MySQL数据库在任何平台下都提供的连接方式,也就是说。只要有网络连接到MySQL的服务器 就可以和数据库进行下一步操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值