大家直接在评论区发布答案就可以哦~
课后作业- 重点内容 Review
- WAL 日志到底是如何保证数据的持久化,宕机后数据不丢失的?
- 相比于其他方案,WAL 日志都有什么优势?
- 除了 Undo Log 之外,是否还有其他方案可以实现 MVCC?
- 基于代价的优化器一般需要考虑哪些代价?
- 执行器的执行模型,除了本课中提到的火山模型是否还有其他模型?
- B+ Tree的优点有哪些?
-
InnoDB 的 buffer pool 是怎么实现页面管理和淘汰的?
< 作业提交截止时间:5月28日 10:00前 >
正确答案:
- WAL是预写日志,需要保证日志落盘才能够进行事务提交。日志中包含了事务对数据的修改,宕机后通过解析WAL日志,就可以对数据进行恢复。
-
相比于每次事务提交时都对数据页面进行flush操作,WAL日志有以下优点:
- 解决了IO放大的问题。
- 随机读写变为顺序读写,对磁盘更友好。
- 除了Undo Log之外,还有shadow paging的方式。例如PostgreSQL就是采用这种方式。这种方式的特点是,在数据页面中同时保留了一行数据的多个历史版本,通过trx_id来区分。
- 基于代价的优化器一般需要考虑IO消耗、网络消耗、CPU消耗等。
- 常见的执行模型有三类:火山模型(Volcano Model/Pipeline Model/Iterator Model/Pull Model)、物化模型(Materialization Model/Push Model)、向量化模型(Vectorized / Batch Model)。
-
B+树的优点如下:
- B+树内部节点不存储数据,只存储键值,这样,每个节点就能存储更多的键值,一次性也就能将更多的键值读入内存,减少了对磁盘的IO操作次数;
- B+树的叶节点有一条链相连,所以对于区间内查询数据比较高效。
- InnoDB的buffer pool通过一个hash_map<page_id, page_ptr>来实现页面的快速查找访问,通过一个LRU来实现页面的冷热淘汰管理。