代码
调试技术
数据库
- 《Getting started with impala》
- 《mysql 必知必会》
- 《mysql 性能调优与架构实践》
- 《Mysql 技术内幕 InnoDB 存储引擎》
- 《Redis 实战》
- 《Redis 深度历险核心原理和应用实践》
- 《redis设计与实现》
- 《七周七数据库》
- 《深入浅出mysql》
- 《高性能mysql第三版》
- 《MySQL是怎样运行的》
前端
GOLANG
- 《1 The Go Programming Language》
- 《2 The Go Programming Language》
- 《3 The Go Programming Language》
- 《Build Web Application With Golang》
- 《Go101》
- 《Network Programming with go》
- 《Building Microservices With Go》
- 《Building Restful Web Services with Go》
- 《Concurrency In Go》
- 《Go In Action(Go 实战)》
- 《Go学习笔记语言详解》
- 《Go学习笔记源码剖析》
- 《Go语言编程》
JAVA
网络
心理学
PYTHON
创业
UNIX/LINUX
分布式
系统设计
搜索引擎
开发工具
- 《Practical Vim》
- 《Vim8文本处理实战》
- 《Learn vim scrpt the hard way》
- 《Pro Git》
- 《Mastering Vim》
- 《Mastering Vim Quickly》
思维
源码
网站架构微服务
- 《微服务架构设计模式》
- 《从0开始学架构》
- 《web scalavility for startup engineers》
- 《designdatainstensive_application》
- 《designdatainstensive_application2》
- 《clean_architecture》
- 《微服务实战》
- 《微服务设计》
软件工程/项目管理
运维
金融理财
写作
互联网
区块链
技术演讲网课
- 《哔哩哔哩的go微服务实战》
- 《go业务基础库之Error&Context》
- 《Go同步和并发设计模式》
- 《300分钟吃透分布式缓存》
- 《DDD实战课》
- 《分布式技术原理与实战45讲》
- 《架构设计面试精讲》
- 《高并发系统设计40问》
- 《java并发编程78讲》
- 《中间件核心技术与实战讲》
职场
《Mysql 技术内幕 InnoDB 存储引擎》
1. Mysql 体系结构和存储引擎
mysql 是单进程多线程架构,支持插件式的表存储引擎,存储引擎基于表而不是数据库。
1.3 MySQL存储引擎:
InnoDB
支持事务,面向在线事务处理(OLTP)应用,特点是行锁设计,支持外键,非锁定读。 使用多版本并发控制(MVCC)获得高并发性。 表中数据的存储,采用聚集(clustered)方式,因此每张表的存储都是按照主键的顺序存放。
MyISAM
不支持事务、表锁设计,支持全文索引,主要面向OLAP数据库应用。
NDB
集群存储引擎,join操作在数据库层完成,不是在存储引擎层,复杂连接需要巨大网络开销
Memory
存放内存中,适用于临时表,默认是哈希索引
Archive
只支持 insert select 操作,告诉插入和压缩功能
2. InnoDB 存储引擎
多线程模型:
- Master Thread: 主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性
- IO Thread: InnoDB中大量使用了AIO(Async IO)处理IO请求
- Purge Thread: 回收已经使用并分配的 undo 页
- Page Cleaner Thread: 将之前版本中脏页的刷新操作都放入到单独的线程中来完成,减轻master工作压力
(关于linux 内存管理:https://blog.csdn.net/gatieme/article/details/52384636 ,内存被细分为多个页面帧, 页面是最基本的页面分配的单位 )
内存:
- 缓冲池:缓冲池技术提升性能(协调磁盘与cpu速度鸿沟) innodb_buffer_pool_size,新版可以有多个缓冲池
- LRU List, Free List, Flush List: 管理内存区
Checkpoint 技术: 为了避免数据丢失问题,当前事务数据库系统普遍使用了Write Ahead Log 策略,当事务提交时,先写重做日志,再修改页。 当由于发生宕机导致数据丢失时,通过重做日志完成数据恢复。 (Durability持久性) Checkpoint 技术解决了几个问题:
- 缩短数据库恢复时间
- 缓冲池不够用时,将脏页刷新到磁盘
- 重做日志不可用时,刷新脏页
当数据库宕机,数据库不需要重做所有日志,因为checkpoint 之前的页都已经刷新回磁盘,只需要对 checkpoint 后的重做日志进行恢复,这样就大大缩减了恢复时间。
InnoDB 通过LSN(Log Sequence Number) 来标记版本。 InnoDB 中两种Checkpoint:
- Sharp Checkpoint: 发生在数据库关闭时将所有的脏页都刷新回磁盘,默认
- Fuzzy Checkpoint: 只刷新一部分
Maste Thread 实现可以参考书中的示例伪代码
InnoDB 关键特性:
- 插入缓冲(Insert Buffer)
- 两次写(Double Write)
- 自适应哈希索引(Adaptive Hash Index)
- 异步IO(Async IO)
- 刷新邻接页(Flush Neighbor Page)
延伸阅读,主要是了解B树: B-Tree: 多叉平衡查找树
- https://zh.wikipedia.org/wiki/B%E6%A0%91
- https://blog.csdn.net/v_JULY_v/article/details/6530142
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论