博客
关于我
MySQL-架构篇
阅读量:800 次
发布时间: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底层概述—9.ACID与事务
查看>>
Mysql建立中英文全文索引(mysql5.7以上)
查看>>
mysql建立索引的几大原则
查看>>
Mysql建表中的 “FEDERATED 引擎连接失败 - Server Name Doesn‘t Exist“ 解决方法
查看>>
MySQL开源工具推荐,有了它我卸了珍藏多年Nactive!
查看>>
MySQL异步操作在C++中的应用
查看>>
MySQL引擎讲解
查看>>
Mysql当前列的值等于上一行的值累加前一列的值
查看>>
MySQL当查询的时候有多个结果,但需要返回一条的情况用GROUP_CONCAT拼接
查看>>
MySQL必知必会(组合Where子句,Not和In操作符)
查看>>
MySQL必知必会总结笔记
查看>>
MySQL快速入门
查看>>
MySQL快速入门——库的操作
查看>>
mysql快速复制一张表的内容,并添加新内容到另一张表中
查看>>
mysql快速查询表的结构和注释,字段等信息
查看>>
mysql怎么删除临时表里的数据_MySQL中关于临时表的一些基本使用方法
查看>>
mysql性能优化
查看>>
mysql性能优化学习笔记-存储引擎
查看>>
MySQL性能优化必备25条
查看>>
Mysql性能优化(1):SQL的执行过程
查看>>