|
既包含概念性知识,也包含一些方法论
基本概念
- 数据库的定义:数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合
- 数据库模式(Schema)的定义:数据库模式是数据库中全体数据的逻辑结构和特征的描述
- 数据库管理系统(DBMS):计算机程序的集合,用于创建和维护数据库。
- 位于OS和APP之间
- 总是基于某种数据类型
- 例子:MySQL, Oracle11g
- 数据库系统(DBS):在计算机系统中引入了数据库后的系统,即采用了数据库技术的计算机系统
数据存储
主要内容:
- 存储器结构
- 磁盘块存取时间(计算)
- 不同存储介质的差异
存储器结构
- 核心思想:层次化存储
- 寄存器-内存-磁盘-磁盘阵列-磁带-...
- 典型的磁盘结构

Image
- 重要术语:盘片platter,盘面surface,磁头R/W head,磁道track,柱面cylinder,扇区sector
磁盘块存取时间
- 块(Block)是OS或DBMS进行磁盘数据存取的最小逻辑单元,由若干扇区组成
- 块是DBMS中数据存取的最小单元(逻辑)
- 扇区是磁盘中数据存储的最小单元(物理)
读块时间计算
读块时间T_{all}=寻道时间S+旋转延迟R+传输时间T+其他延迟other
- 在真实情境中,会要求计算“最优”、“平均”、“最坏”情况下的读块时间
- S一般在10ms-40ms之间
- R是磁盘转动到块的第一个扇区到达磁头所需的时间.
- 磁盘转速单位:RPM (Rotation / Min)
- 平均时间为旋转1/2周所费的时间
- e.g., 一个7200RPM的磁盘,平均旋转延迟\overline{R}=\frac{60\times 10^3 ms}{7200}\times\frac{1}{2}\approx 4.17 ms
- T是块的扇区及其间隙旋转通过磁头所需的时间
- e.g., 磁道大约有100,000 Bytes,约10ms转一周,则每秒可从磁盘读取1000/10*100000$\approx$10MB. 一个4KB的块传输时间小于0.5ms
- 其他延迟:
- CPU请求IO的时间
- 争用磁盘控制器时间
- 征用总线和主存的时间
- 典型情况:0(忽略不计)
- 如何读下一块:
- 在同一柱面上->R+T+other
- 不在同一柱面上->S+R+T+other
写块时间计算
- 如果无需校验;则与读块相同
- 如果需要校验,则需要加上1次旋转时间和1次块传输时间
块修改
- 将块读入主存
- 在主存完成修改
- 将块重新写入磁盘
- 块地址=<物理设备号,柱面号,盘面号(或磁头号),扇区号>
不同存储介质优缺点对比
- 传统存储器件:磁盘、磁带等
- 新型存储器包括:闪存、相变存储器、磁阻式存储、电阻式存储器、忆阻器等. 共同特点:非易失性
- 优点:高存储密度、低功耗、无机械延迟、存取速度快、便携、抗震、低噪音
- 缺点:读写性能不对称、读写次数有限、可靠性不高
闪存(Flash Memory)
- 读写不对称(写慢读快)
- 写前擦除:异位更新、块擦除操作
- 寿命有限:块擦除次数有限
- 按页读写
- 按块擦除
相变存储器(Phase Change Memory)

Image
数据表示
主要内容:
- 数据项的表示
- 记录的表示
- 记录在块中的组织
- 块在文件中的组织(链表式堆文件和目录式堆文件)
数据元素的表示层次:
数据项->记录->块->文件 数据项的表示
- 数据项本质是字节序列,表示关系数据库中元组的属性值
- 数据项表示方法:SQL数据类型
- e.g., Integer (short),2 bytes, 16 bits
- SQL中的数据项表示总结

Image
记录的表示
固定格式定长记录
- 所有记录具有相同的逻辑结构(模式)
- # fields
- Name of each field
- Type of each field
- Order in record
- offset of each field in the record
-- SQL中固定格式定长记录的构造
CREATE TABLE Student(
stid CHAR(30) PRIMARY KEY,
stname VARCHAR(255),
gender CHAR(1),
birthdate DATE
)记录首部
- 在记录首部(Head)描述记录的信息
- 记录类型(模式信息)
- 记录长度
- 时间戳(用于并发控制)
- 其他信息
- 示例

Image
可变格式记录
- 每个记录的格式不同
- 记录的格式存储于记录中
- 典型例子:Key-Value. Key与Value都以字节流存储,如:
typedef struct{
void *data; //字节流指针
int size; //字节流长度
} DBT;
// 数据类型没有限制
// 应用与数据库之间不需要转换数据格式
// 不提供key和value的内容和结构信息
// 应用必须知道value的含义
- 优点
- 灵活的记录格式,适合“松散”记录,如病人的检验结果
- 适合处理重复字段
- 适合记录格式演变
- 缺点
- 标记存储方式空间代价高
- KV方式难以支持复杂查询
- 应用负担重且事务处理等实现困难
记录在块中的组织
- 定长记录:记录地址rid通常使用<块号,槽号>表示
- 变长记录:记录地址通过槽目录+<记录偏移量,长度>表示
块在文件中的组织
- 堆文件(Heap File)
- 最基本、最简单的文件结构
- 记录不以任何顺序排序
- 记录可能存放在物理不邻接的块上
- 插入容易,但查找和删除代价高
- 链表式堆文件组织
首块 <-> 数据块 <-> 数据块 <-> 数据块 -> 含空闲空间的块链表 [邻接数据块阵列(首块)] -> [邻接数据块阵列] -> [邻接数据块阵列] -> ... SQL Server的数据存储结构
- 数据存储的基本单位式是页。一页的大小是8KB
- 页地址:<文件号,页号>
- 数据行地址:<页地址,槽号>
- 扩展盘区:介于块和文件之间,一个扩展盘区是8个邻接的页(或64KB)
- SQL Server文件组织
- 主要数据文件(.mdf):指向数据库中文件的其他部分
- 次要数据文件(.ndf)
- 日志文件(.ldf)
- 数据文件的起始结构:PFS页,GAM页,SGAM页
- PFS:记录扩展盘区的哪些页已分配或可用,一个PFS记录约8,000页
- GAM:记录已分配的扩展盘区,每个元素是一个PFS
- SGAM:记录当前用作混合扩展盘区且至少有一个未使用的页
扩展盘区的当前使用情况 | GAM位设置 | SGAM位设置 | 可用,未使用 | 1 | 0 | 统一扩展盘区或已满的混合扩展盘区 | 0 | 0 | 有可用页的混合扩展盘区 | 0 | 1 |
本文使用 Zhihu On VSCode 创作并发布 |
|