《MySQL 技术内幕》MySQL 体系结构和存储引擎

文章目录

    • 定义数据库和实例
    • MySQL 体系结构
    • MySQL 存储引擎
    • 各存储引擎之间的比较
    • 连接 MySQL
    • 小结

定义数据库和实例

  • 数据库领域中很容易混淆的两个词
    • 数据库
      • 物理操作系统文件或其他形式文件类型的集合
    • 实例
      • MySQL 数据库由后台线程以及一个共享内存区组成
      • 数据库实例才是真正用于操作数据库文件的
    • 在 MySQL 数据库中,数据库与实例的关系是一一对应,集群情况下,可能存在一对多的情况
  • MySQL 被设计为一个单进程多线程架构的数据库
    • 实例在系统上的表现就是一个进程

MySQL 体系结构

  • MySQL 体系结构图(摘自 MySQL 官方手册
  • 组成部分
    • 连接池组件
    • 管理服务和工具组件
    • SQL 接口组件
    • 查询分析器组件
    • 优化器组件
    • 缓冲(Cache)组件
    • 插件式存储引擎
    • 物理文件
  • 区别于其他数据库的最重要特定:插件式的表存储引擎
  • 存储引擎是基于表,而不是数据库

MySQL 存储引擎

  • InnoDB 是 MySQL 数据库 OLTP 应用中使用最广泛的存储引擎
    • OLTP:Online Transaction processing 在线事务处理
  1. InnoDB 存储引擎(默认存储引擎
    • 设计主要目标:面向 OLTP 的应用
    • 主要特点:行锁设计、支持外键、非锁定读、事务
    • 通过多版本并发控制(MVCC)来获得高并发性
    • 实现了 SQL 标准的 4 种隔离级别,默认为 REPEATABLE 级别
      • 使用 next-key locking 的策略来避免 幻读 现象的产生
    • 其他高可用和高性能的功能(插入缓冲、二次写、自适应哈希索引、预读
    • 采用聚集(聚簇)的方式存储表中的数据
      • 按主键的顺序进行存放
      • 若未显式定义,InnoDB 会为每一行生成一个 6 字节的 ROWID,作为主键
  2. MyISAM 存储引擎
    • 不支持事务与行锁,支持表锁、全文索引、压缩索引等
    • 主要面向一些 OLAP 数据库应用
      • OLAP:Online Analytical Processing
    • MyISAM 的缓冲池只缓存索引文件,而不是缓冲数据文件(与其他大多数数据库不同
    • 存储引擎表由 MYD 和 MYI 组成
      • MYD:存放数据文件
      • MYI:用来存放索引文件

各存储引擎之间的比较

  • 不同 MySQL 存储引擎相关特性比较
  • 以上展现常用MySQL存储引擎之间的不同之处
    • 存储容量的限制
    • 事务支持
    • 锁的粒度
    • MVCC 支持
    • 支持的索引
    • 备份和复制
  • 插入同等大小的数据,InnoDB 占据空间最大,次之 MyISAM(InnoDB、MyISAM、Archive 之间比较

连接 MySQL

  • 连接 MySQL 操作:一个连接进程和 MySQL 数据库实例进行通信
    • 本质上是 进程通信
  • 常用的进程通信方式
    • 管道
    • 命名管道
    • 命名字
    • TCP/IP 套接字
    • UNIX 域套接字
  1. TCP/IP
    • 该方式是 MySQL 数据库在任何平台下都提供的方式,也是网络中使用最多的
    • 在 TCP/IP 连接到 MySQL 实例时,会先检查一张权限视图(权限校验
      • 数据库名:mysql # 表名:user
  2. 命名管道和共享内存
    • Windows平台上,如果两个需要进程通信的进程在同一个服务器上,那么可以使用命名管道
      • 配置文件中需要启用 --enable-named-pipe
    • MySQL 还提供了共享内存的连接方式
      • 配置文件中需要启用 --shared-memory
      • 客户端连接时还需要使用 --protocol=memory
  3. UNIX 域套接字
    • 在 Linux 和 UNIX 环境下,还可以使用 UNIX 域套接字
      • 只能在 MySQL 客户端 和 数据库实例 在同一台服务器上的情况下才能使用
      • 在配置文件中指定套接字文件的路径:--socket=/tmp/mysql.sock
      • 连接命令样例:mysql -uroot -S /tmp/mysql.stock

小结

  • 数据库 与 数据库实例 的区别
  • MySQL 体系结构
  • MySQL 独有的 插件式存储引擎 的概念
  • 常见表存储引擎的特性

你可能感兴趣的:(数据库,MySQL,技术内幕,InnoDB,存储引擎)