高级数据库系统——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 (处理过程可以同时预取,缓冲下一个要处理的内容进入缓冲区)
- 编程的复杂度,状态增加,控制管理难度增加。
- DBMS的特点,可以预先知道一些信息
- 缓冲的缺点
- 主存的占用
- 缓冲区管理
- 一致性问题
- 单缓存(Single Buffering)
New-type Data storage(NVM...)
新型存储
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!