触类旁通
- 据我的学习经验,优秀的源码里面无非就是一些通用经验,通用设计模式,通用算法,通用操作系统知识,通用数据结构的组合。既然是通,其实大可以触类旁通,就看其组装的怎么样了,组装得好就是3A佳作,组装得不好甚至用地摊货就是泰坦陨落(仙6风评被害)。
- 误杀(翻拍自误杀瞒天记)电影里面有一句话是:如果你看过1000部电影,就会知道这世界本没有什么离奇的事情。我觉得可以说:如果你看过1000份优秀源码,就会知道这世界并没有什么难懂的源码。------虽然我阅历尚浅,并未看过多少源代码,只是一个练习时长两年半的非科班生。
浅浅
我们先身在第一层,其持久化机制,
- mysql:可以简单的说,mysql的持久化机制(在这里我们只讨论innodb,后文也是)是通过redolog实现的,其redolog又是先写入redolog缓冲区,再写入redologfile,再写入磁盘文件三步来实现的。
- redis:而redis是通过rdb或者aof来实现其持久化的
- rocketmq: rocketmq是通过commitLog来实现其持久化的
浅
那么我们到了第二层
- mysql:
- 每次事务提交之前会保证对数据页的修改写入redolog缓冲区,然后这里存在异步同步刷盘策略(设计模式),写入缓冲区后何时写入redolog file,这里提供了innodb_flush_log_at_trx_commit参数。
- 0:事务提交不进行写入redolog操作,由主线程来将buffer写入redolog,每秒钟做一次redolog的fsync落盘redolog file。(mysql宕机即丢失数据)
- 1:事务提交时必须调用fsync将redolog落盘
- 每次事务提交之前会保证对数据页的修改写入redolog缓冲区,然后这里存在异步同步刷盘策略(设计模式),写入缓冲区后何时写入redolog file,这里提供了innodb_flush_log_at_trx_commit参数。