博客
关于我
MySQL-架构篇
阅读量:795 次
发布时间: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 - 解读MySQL事务与锁机制
查看>>
MTTR、MTBF、MTTF的大白话理解
查看>>
mt_rand
查看>>
mysql /*! 50100 ... */ 条件编译
查看>>
mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
查看>>
mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
查看>>
mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
查看>>
mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
查看>>
MySQL 8.0 恢复孤立文件每表ibd文件
查看>>
MySQL 8.0开始Group by不再排序
查看>>
mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
查看>>
multi swiper bug solution
查看>>
MySQL Binlog 日志监听与 Spring 集成实战
查看>>
MySQL binlog三种模式
查看>>
multi-angle cosine and sines
查看>>
Mysql Can't connect to MySQL server
查看>>
mysql case when 乱码_Mysql CASE WHEN 用法
查看>>
Multicast1
查看>>
MySQL Cluster 7.0.36 发布
查看>>
Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
查看>>