博客
关于我
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函数汇总之系统信息函数
查看>>
MySQL函数简介
查看>>
mysql函数遍历json数组
查看>>
MySQL函数(转发)
查看>>
mysql分区表
查看>>
MySQL分层架构与运行机制详解
查看>>
mysql分库分表中间件简书_MySQL分库分表
查看>>
MySQL分库分表会带来哪些问题?分库分表问题
查看>>
MySQL分组函数
查看>>
MySQL分组查询
查看>>
Mysql分表后同结构不同名称表之间复制数据以及Update语句只更新日期加减不更改时间
查看>>
mySql分页Iimit优化
查看>>
MySQL分页查询
查看>>
WebDriverException:未知错误:对于旧版本的 Google Chrome,在 Python 中找不到带有 Selenium 的 Chrome 二进制错误
查看>>
mysql列转行函数是什么
查看>>
mysql创建函数报错_mysql在创建存储函数时报错
查看>>
mysql创建数据库和用户 并授权
查看>>
mysql创建数据库指定字符集
查看>>
MySql创建数据表
查看>>
MySQL创建新用户以及ERROR 1396 (HY000)问题解决
查看>>