高级数据库系统——Data-Storage

Data Storage

回顾 DBMS,纵列-Storage,旁路-Transaction、ACID。

DBMS 的设计十分考虑底层存储设备的特性(思考:SSD->NVM)。

Disk Structure

Storage(Memory) Hierarchy

分割线

主/外存

  • 按字节寻址与否:CPU 直接访问按字节寻址设备,按位存取,无法直接访问块设备
  • 易失性:掉电数据是否丢失

过去 DRAM-Disk 字节寻址和易失性区分是一致的,NVM 设备开发出来后出现了可按字节寻址且非易失的设备。

Q:NVM 设备是否可被 CPU 直接存取(SPDK?)

Block Access Time

  • 块(Block)

    • OS/DBMS IO 的最小逻辑单元,由若干连续扇区构成(Linux-4KB MSWindows-4KB)
    • 块是 DBMS 中数据存取的最小单元
    • 扇区是磁盘中数据存取的最小单元

    Q:4KB 块大小,4.1KB 数据如何存储? A:不同 DBMS 策略不同,比如 SQL Server 不允许跨块存储,单条数据最高 4KB,或者可以将数据划分到两块,但这样会增加每次查询的时间。不同的 DBMS 对于块大小的设计也不相同,中小型 4KB 足够,更大的可以设计成 8KB/16KB 来针对大数据的存储,同时还可能支持可变大小。

  • 磁盘块读取时间

    • 数据库研究里面,复杂度主要由 IO 次数度量
    • 读下一块
      • Case 1: 同柱面(Sequential I/O)寻道的次数大幅减少
      • Case 2: 不同柱面(Random I/O)
    • 块地址
      • 物理设备号(/dev/nvme1)
      • 柱面号
      • 盘面号(或磁头号)
      • 扇区号
      • 物理地址和逻辑地址(文件系统做映射)
    • DBMS 可优化的方向:
      • IO 次数
      • 寻道次数(IO 操作内)

Optimization

  • 按柱面组织数据(减少平均寻道时间,从 Data 的放置位置入手)
  • 磁盘调度算法(电梯算法、SCAN、CSCAN、LRU)
  • 磁盘阵列(Disk Arrays,不竞争资源,物理上读取并行)
  • 磁盘镜像
  • Random IO to Sequential IO
  • 预取(Pre-fetch)缓冲(Buffer)

  • Random IO to Sequential IO

    • 缓存页码相近的先不直接 IO,Cluster 以后再进行存储
  • 预取(Pre-fetch)缓冲(Buffer)
    • 单缓存(Single Buffering)
      • 处理时间: n(P+R) , n 块数,P 缓冲区处理时间,R 将一块读入缓冲区的时间
    • 双缓存(Double Buffering)
      • DBMS的特点,可以预先知道一些信息
        • SQL语句-> 查询编译会生成查询计划/查询序列
        • 可以通过计划知道下一步要进行什么
      • 处理时间:nP+R (处理过程可以同时预取,缓冲下一个要处理的内容进入缓冲区)
      • 编程的复杂度,状态增加,控制管理难度增加。
    • 缓冲的缺点
      • 主存的占用
      • 缓冲区管理
      • 一致性问题

New-type Data storage(NVM...)

新型存储