11、从数据库的增删改查开始说起,回顾一下Buffer Pool在数据库里的地位
1、一起从数据库的增删改开始说起
好了,学习到现在,我们已经初步的了解MySQL的整体架构设计,大家对于MySQL内部包含哪些组件,我们平时更新数据以及穿数据的时候,大致都是怎么做的,都已经哟一个比较高层次的了解了。
另外现在我们初步的了解了MySQL的架构原理之后,还给大家介绍了一些我们的数据库相关的生产经验,就是对于任何一个项目,数据库都需要选择好合适的机器,同时做好压测,并且有一个完善度的可视化监控系统。
现在可以理解为每个人手头都有了一个可用的数据库,并且对数据库的整体架构原理都有了一定的理解了。那么接下来,我们要细细的学习数据库的方方面面了。
那么我们应该从哪个环节开始入手呢?
当时然是从数据库的增删改查开始了,因为当你手有了一个数据库之后,你必然就会去开发一个系统,系统就直接基于数据库做各种增删改查的操作,实现各种各样的业务逻辑。
而任何一个系统在使用数据库的时候,一定是从插入数据库开始的,也就是首先会对数据进行增删改查的操作。
当你的数据库中有了数据之后,接着才会执行各种各样的查询操作。
所以我们学习的顺序,就按照手头有了一个经过压测的、有完善监控的数据库之后,你开发的系统使用数据库的顺序来学习,先学习系统对数据库执行各种增删改查操作时背后对应的内幕原理,以及事物的原理,包括锁的低层级制,然后学习你有了数据只会,执行各种复杂的查询操作的时候,设计到的索引底层原理,查询优化的底层原理。
当然这个中间我们会穿插各种各样的生产时间的案例。
然后学习完这些以后,我们在来讲解平时我们在开发系统时候,如何进行数据库的建模,在建模的时候,应该如何注意字段类型、索引类型的一些问题,如何保证数据库避免死锁、高性能的运行。
接着我们在学习一些高阶的数据库架构设计,比如说主从架构设计以及分库分表架构设计,包括一些生产时间的案例。
好,那么就从现在开始,让我们一起来探索数据库的各种底层机制和生产实践案例吧
2、回顾一下Buffer Pool是个什么东西?
现在我们先来回顾一下数据库中的Buffer Pool是个什么东西?其实他是一个非常关键的组件,因为我们通过之前的学习都知道一点,那就是数据库中的数据实际上最终都是要存放在磁盘文件上的,如下图所示:
但是我们在对数据库执行增删改操作的时候,不可能直接更新磁盘上的数据的,因为如果你对磁盘进行随机读写操作,那速度是相当的慢,随便一个大磁盘文件的随机读写操作,可能都要几百毫秒。如果要是那么搞的话,可能你的数据库每秒也就只能处理几百个请求了。
之前我们也学习了,你在对数据库执行增删改操作的时候,实际上主要都是针对内存里的Buffer Pool中的数据进行的,也就是你实际上主要是对数据库的内存里的数据结构进行增删改查,如下图所示:
当然,我们之前都说过,其实每个人都担心一个事,就是你在数据库的内存里执行了一堆增删改查的操作,内存数据是更新了,但是这个时候如果数据库突然崩溃了,那么内存里更新好的数据不是就没了吗?
所以其实之前我们开始就用了很多篇幅去学习了这个问题,MySQL就怕这个问题,所以引入了一个redo log机制,你在对内存里的数据进行增删改查的时候,他同时会把增删改查对应的日志写入redo log中,如下图:
- w728
万一你的数据库突然崩溃了,没关系,只要从redo log日志文件里读取出来你之前做过哪些增删改查操作,瞬间就可以重新把这些增删改查操作在你的内存里执行一遍,这就可以恢复出来你之前做过哪些增删改查操作了。
当然对于数据更新的过程,他是有一套严密的步骤的,还涉及到undo log、binlog、提交事物、buffer pool脏数据刷回磁盘,等等。我们之前已经学习过了。这里就不再重复了,仅仅和是大家一起回顾下数据库中的buffer pool这个东西。
3、Buffer Pool的一句话总结
所以这里我们简单对Buffer Pool这个东西做一个总结,他其实是数据库中我们第一个必须要搞清楚的核心组件,因为增删改操作首先就是针对这个内存中的Buffer Pool里的数据执行的,同时配合了后续的redo log、刷磁盘等机制和操作。
所以Buffer Pool就是数据库的一个内存组件,里面缓存了磁盘上的真实数据,然后我们的系统对数据库执行的增删改查操作,其实主要是对这个内存数据结构中的缓存数据执行的。
这一篇文章我们先对Buffer Pool这个东西的定位做一个简单的回顾,下一篇文章我们来分析一下Buffer Pool这个内存数据结构里到底包含了一些什么东西。