查看: 107|回复: 0

高级数据库系统知识点总结(Part 1):基本概念、I/O代价计算

[复制链接]

3

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2023-3-26 18:53:43 | 显示全部楼层 |阅读模式
既包含概念性知识,也包含一些方法论
基本概念


  • 数据库的定义:数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合
  • 数据库模式(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

记录的表示


  • 记录是数据项的集合
  • 记录的类型

    • 固定格式 vs. 可变格式
    • 定长 vs. 变长

固定格式定长记录


  • 所有记录具有相同的逻辑结构(模式)

    • # 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位设置
可用,未使用10
统一扩展盘区或已满的混合扩展盘区00
有可用页的混合扩展盘区01
本文使用 Zhihu On VSCode 创作并发布
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表