【DB-1】DBMS存储技术

一、物理存储介质

  1. 易失性存储
    DRAM
    随机访问、字节寻址
  2. 非易失性存储
    SSD
    顺序访问
    块/页寻址

对于非易失磁盘HDD,顺序访问的效率显然更高,因为只要访问连续的磁盘块,只需要对第一个磁盘块的寻道时间;而随机访问每次都要进行重新寻道。
对于SSD,理论上随机访问和顺序访问是一样的,但实际上顺序访问仍然有明显优势(缓存友好、预读友好)

二、DBMS存储系统

核心设计目标:
允许DBMS管理体量远超内存空间的数据库实例

需要解决的问题:

  1. 如何在磁盘上组织数据库的内容
  2. 如何管理内存和磁盘间数据的交换?
    在这里插入图片描述

三、磁盘上的文件存储

数据库实例在DBMS里存储为一系列文件
概述
4种存储方式:

  • 堆文件组织
  • 顺序文件组织
  • 散列文件组织
  • 多表聚簇组织

堆文件
是一系列Pages的集合,一个page存储一系列元组

读写pages时候如何快速定位?

  • 链表堆文件
  • 目录堆文件
    在这里插入图片描述

面向列的存储方式
事实上,行存并不是db的标准。针对不同的需求,数据可以有不同的存储方式。

  • OLTP
    简单独写少量数据
    通常只涉及一个或者少量元组

  • OLAP
    读取大量数据,涉及大量元组
    (适合列存)
    在这里插入图片描述

四、缓冲池(内存和磁盘间数据如何交换?)

DBMS如何管理内存和磁盘间数据的交换?
目标:减少CPU等待,最大化顺序访问

  1. 空间管理
  • 页面写至磁盘何处?
  • 局部性原则:同时访问的页面物理位置尽可能近
  1. 时间管理
  • 页面何时读入内存
  • 何时写至磁盘
  • 最小化磁盘读取引起的停滞

缓冲池管理器

结构

因为磁盘读写的基本单位是页面(Pages) 缓冲池的基本单位也是Page 这里叫做帧

缓冲池里存了一系列的页面,为了快速对这些页面进行访问,还需要在缓冲池里维护另外一个结构——页表 (也就是目录) 记录页面id对应的内存地址。
在这里插入图片描述

页表除了存地址,还记录页面的额外元数据:


  • 用于维护页面的一致性。当线程更改了某页面时,告知存储管理器将页面写回磁盘。
  • 大头针(计数器)
    记录当前访问该页面的线程数。
    不为0的时候,存储管理器不能将其写回。 因为此时页面还在被使用,写回那就有线程找不到这个页面了…

页表 vs 页面目录
在这里插入图片描述

帧分配

对于有限空间的缓冲池,如何决定哪些页面何时放入页面?

  • 全局策略
    针对DBMS的全局负载和所有活跃事务安排内存空间
  • 局部策略
    针对当前事务安排内存空间提高当前事务的效率,而不考虑全局负载、并发的其他事务
  • 混合策略(多数DBMS)

优化设计

  1. 多缓冲池
  2. 预取
  3. 共享游标
  4. 略过 (不用缓冲池)
  5. OS页面缓存(直接使用OS的缓存机制,而不是再DBMS上重新设计一套)

帧逐出算法(页面置换算法)

  • LRU
  • 时钟置换(CLOCK)
  • MRU
  • LRU-K (K个时间戳)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值