博客
关于我
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

你可能感兴趣的文章
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>