一文看懂Mysql架构

写在前面的话

Stay Hungry Stay Foolish!!!
每天进步一点点!!!

Mysql逻辑架构

Mysql逻辑架构共三层:

  1. 入口层:连接/线程处理
  2. 服务执行层
  3. 存储引擎

连接/线程处理

像大多数架构来说,入口层是必不可少的;Mysql入口层主要负责连接管理和认证及权限管理等。

  • 连接管理:每个连接拥有一个线程,Mysql服务端维护了一个维护连接的线程池
  • 认证管理:基于用户名、原始主机信息和密码;如果使用了SSL连接,还可以使用X.509证书认证
  • 权限管理:Mysql对库、表及操作权限都可以进行约束管理

服务执行层

执行层主要包含以下组件:

  • 查询缓存:像大多数架构中的redis
  • 解析器:词法分析和语法分析,创建一个解析树(内部的数据结构)
  • 优化器:主要做的就是重写查询、决定表的读取顺序、选择合适的索引等工作。

存储引擎

Mysql有以下存储引擎:

  • InnoDB(默认)
  • MyISAM
  • 其他非常用引擎
    • Archive
    • Blackhole
    • CSV引擎
    • Federated引擎
    • Memory引擎
    • Merge引擎
    • NDB集群引擎

InnoDB

  • 数据存储:表空间,由一系列的数据文件组成。存储文件是平台独立的,可以任意复制到各操作系统
  • 事务:支持MVCC和实现了间隙锁来防止幻读
  • 索引:基于聚簇索引(主键索引)实现。二级索引(非主键索引)都是包含了主键索引的
  • 性能优化措施:
    • 磁盘预读
    • 加速读操作的自适应哈希索引
    • 插入缓冲区(insert buffer)

MyISAM

【功能】

  • 支持:全文索引、压缩、空间函数(GIS)
  • 不支持:事务、行级锁、崩溃后无法安全恢复

【存储】

  • 文件:数据文件(.MYD)和索引文件(.MYI)
  • 变长行处理:
    1. 5.0以前:默认能处理4G的数据,指针长度为4个字节,32位
    2. 5.0:默认能处理256TB的数据,因为指针长度为6个字节
    3. 所有版本都支持8字节,根据配置项MAX_ROWMAX_ROW_LENGTH配置,两者相乘得到最终值

【特性】

  • 加锁与并发:表级锁和并发插入(读时可写)
  • 修复:
    1. 人工修复:CHECK TABLE mytable和REPAIR TABKE mytable语句
    2. 自动修复:myisamchk命令行
  • 索引特性:全文索引(基于分词创建),对于BLOB和TEXT,会基于前500个字符创建索引
  • 延迟更新索引键(Delayed Key Write):建表时开启DELAY_KEY_WRITE。修改先写入键缓冲区,等清理缓冲区或关闭表时才会更新索引
  • 压缩表:压缩后不可修改,表记录独立压缩

其他非常用引擎

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MySQL不权威总结 欢迎阅读 本文并非事无巨细的mysql学习资料,而是选择其中重要、困难、易错的部分进行系统地...
    liufxlucky365阅读 2,617评论 0 26
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,750评论 0 30
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,463评论 1 8
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,407评论 0 9
  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 3,009评论 0 8