存储结构模型
在红线之上的是volatile storage(易失存储),其需要电力支持,当断电的时候会失去存储的内容。
红线之下的是none-volatile storage(非易失存储),及时断点也不会失去存储内容,因而也可被称为持久化存储。
volatile storage的寻址方式较none-volatile storage更简单,none-volatile storage需要块地址加上字节偏移来确定一个地址。
none-volatile的获取代价较为昂贵。
中间还插了一嘴,某种None-volatile Memory兼具二者的优势,在快速访问的同时也可以持久化存储。
接下来是各个设备的Access Time的比较。
访问内容的一个简单示例
为什么不适用OS的内存管理机制
结论:不要使用M-map,让db处理自己的事情最好。
存储处理器(Storage Manager)
Storage Manager负责维护DB文件,有些甚至会预测页表的时空位置
其使用页的形式来管理文件(跟踪页的读写信息,记录空闲页)
页:一组空间固定的数据块
页大小
Hardware Page(一般4KB)
OS Page(一般4KB)
DB Page(512B-16KB)
链表式结构
链表发存储两个链表,一个是空闲页的链表,另一个则是非空闲页的链表。
目录法
维护一个特殊的Directory映射页的信息
例如Directory包含被映射页的空余空间大小
页的结构信息
页头
存储结构
劣势:无法确认具体删除了那一块Tuple(即无法确认Tuple的具体位置)。
使用插槽映射tuple数据,插槽映射了tuple数据的页偏移,这样我们就可以相对随意的移动tuple的位置,因为tuple的偏移量已经存储在slot中,可以通过slot轻松获取这一信息。
slot从头部生长,tuple数据从尾部生长,当slot与tuple间无法再存储数据时,我们成为页满了。(这个好像跟Jvm的部分内存分配策略有异曲同工之妙)