博客
关于我
MySQL-架构篇
阅读量:797 次
发布时间:2023-02-11

本文共 864 字,大约阅读时间需要 2 分钟。

  hot3.png

   做企业应用开发的童鞋,关系数据库RDB肯定接触不少,天天闹腾SQL,本文主要以InnoDB为例。

   来张图RDB架构图:

  

  就是这张经典的图,把RDB的主要组件都描述出来了:

  查询编译器,把SQL语言,经过语法树、关系代数、查询优化到物理流水,其中就有代价估算、连接顺序等,别说你不知道查询计划;
  事务管理器,处理请求并发、日志记录,悲观的-锁,InnoDB的行锁(索引实现)、意向锁,还有基于时间戳的、基于版本号的乐观并发控制;redo日志、undo日志(读不阻塞写,MVCC),日志在数据之前写入等;
  索引管理器,这个常见,特别是B+索引,InnoDB支持自适应哈希 还,当然还有KD树、四叉树、R树、位图;不止是RDB,mongoDB也得靠索引,当然可能需要专门找个人干搜索这活,比如SolrCloud、ElasticSearch;
  缓冲管理器,据说mongoDB的mmap引擎用的是内存-磁盘映射,但RDB是自己管理,内存IO跟磁盘IO根本不是一个数量级,所以,数据字典、行数据、索引、日志、请求线程内存,用oracle说就是SGA、PGA;
  存储管理器,现在的RDB,还是以传统的磁盘为主,虽说现在游戏本都是SSD的,概念结构就是表空间-段-区-块,每个块默认8kb,对应几个扇区,然后连续64个一个区,就是保证一定程度的顺序IO,机械磁头转得慢的说,索引段、数据段、UNDO段等,还有日志文件组,至于具体的文件格式,可以参考innodb实现内幕;
  执行引擎,请求处理,就是表扫描了,基于索引、基于排序、基于哈希的扫描方式,当然多表还涉及连接算法,基于循环、数据块等等,比较常见的就是nested-loop;至于后台管理,在mysql里,主要是个masterThread、在里面刷脏页啥的,oracle是ckpt、dbwr、lgwr等。

  最后,来张innodb5.6的体系结构图,对照实际的数据库看下子:

  

  然后,oracle就不发了。

转载于:https://my.oschina.net/lobo/blog/757887

你可能感兴趣的文章
MySQL-连接
查看>>
mysql5.5和5.6版本间的坑
查看>>
mysql5.5最简安装教程
查看>>
mysql5.6 TIME,DATETIME,TIMESTAMP
查看>>
mysql5.6.21重置数据库的root密码
查看>>
Mysql5.6主从复制-基于binlog
查看>>
MySQL5.6忘记root密码(win平台)
查看>>
MySQL5.6的Linux安装shell脚本之二进制安装(一)
查看>>
mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
查看>>
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>