c5-事务的处理与恢复

ACID

原子性

对应数据库来讲只有事务这个概念,没有更细微的操作.不能出现做到一半的情况.

一致性

在处理事务时不能出BUG导致数据库本身的破坏.

隔离性

对于一个正在执行的事务来讲,好像整个数据库是被其独占一样.

持久性

事务完成了就是完成了 crash/断电/其他异常出现后,恢复时也要保证这一点.

缓存管理

数据库的一大麻烦之处就在于要最优化磁盘/内存/CPU/网络,简单的讲就是最好重写操作系统 (笑)

这里的缓存管理实际上就是面向数据库操作优化的页缓存

5.1.3 在缓存中锁定页

某些文件(页)在使用中因为设计的原因会一直保持"高温"的状态,例如根节点的几个页.我们可以选择将其Pin在内存中

5.1.4 页置换

这个水晶球怎么看怎么像机器学习 (望天) 数据是有的 (真正的页缓存未命中的次数) 判断函数也是有的 (应用了新的策略后是否减小了缓存穿透)

FIFO/LRU

先入先出: 维护页缓存列表(加到最后),满时干掉第一个 最后访问时间: 访问时维护页缓存列表(每次访问赋予某页权重) 满时干掉权重最低的 LRU实现

Belady现象

在我看来Belady现象的本质原因在于,FIFO根本就不是一个有意义的置换算法,只不过是置换的一种方式罢了,没有考虑置换的意义是什么(减少置换).从实践的角度上讲,正好会越换越遭.

CLOCK

clock讲解 clock讲解 实际上感觉是对LRU在工程上的优化.在不使用哈希表的情况下减少了遍历的次数

LFU (最近最少使用)

访问累计频率, 满时干掉频率最低的

5.2

物理日志概念对应的应该是快照

5.3 并发控制

异常

下面是报菜名阶段

脏读

幻读

不可重复读

丢失更新

脏写

写倾斜

并发控制