第3节 数据库存储系统(Part 1)
1. 存储
DBMS 设计架构是基于数据存储在持久化磁盘上(non-volatile disk)。
非持久化设备
- 非持久化是指机器下电后数据会丢失
- 非持久化设备支持快速的随机访问
持久化设备
-
持久化是指设备不需要持续供电,就能数据不丢失
-
持久化设备支持 block/page 访问
-
持久化设备顺序访问(顺序IO)相对随机访问(随机IO)性能更好
-
SSD(solid-state storage)和HDD(spinning hard drives)是两种持久化存储设备,本文不对齐做太大的区分
DBMS架构是基于数据存储在持久化设备上,由于数据库系统无法直接操作磁盘数据,DBMS系统需要解决数据在持久化设备和非持久化设备之间的移动问题。
基于磁盘的数据库管理系统概览
由于DBMS假设数据存储在磁盘上,因此DBMS的任务是从磁盘到内存之间来回移动数据,因为系统不能直接对磁盘进行操作。一个数据库系统的目标是让上层应用感觉所有的操作都在内存上,即使内存远小于磁盘空间。由于磁盘读写会带来很大的开销,DBMS需要在等待磁盘的数据时也能够处理其他查询请求。
数据库系统中有缓冲池buffer pool,缓冲池命中率越高说明磁盘的读请求越少,查询效率越高,反之如果缓冲池命中率很低,说明有大量的磁盘读请求发生,查询性能较差。
DBMS vs OS
Note: The OS is not your friend.
DBMS自己管理page始终会是一个更加高效且安全的做法,这可以更好的支持:
- Flushing dirty pages to disk in the correct order. 脏页按照正确顺序刷盘
- specialized prefetching. 针对性的页面预期策略
- Buffer replacement policy. 缓冲区页面淘汰策略
- Thread/process scheduling. 多线程/进程调度
File Storage
大多数DBMS都是将文件按照特定的格式编码,以并文件形式存储在操作系统上,通过OS提供的API进行读写,并由存储引擎去管理和维护。早期的一些商业数据库定制了文件管理系统(如:Oracle,DB2和SQL server)。
数据库 Pages
page 在DBMS中有3层含义
-
硬件Page(通常4KB)
-
OS Page(4KB)
-
Database Page(1-16KB)
Oracle, DB2, Page size 4KB
SQL Server, PostgreSQL, Page size 8KB
MySQL, Page size 16KB
数据库堆表
数据库中的heap文件是一个无序的page集合,可以随机地把tuple数据存在文件里(注意,关系数据库模型中的行无序和列无序性质使得这种随机存储并不会出现问题)。
可以通过Linked List或者Page Directory的形式将page组织成一个heap。
Page结构
Page上的元数据信息通常包含以下信息:
- Page size.
- Checksum.
- DBMS version.
- Transaction visibility.
- Self-containment. (Some systems like Oracle require this.)
Tuple结构
Tuple是指数据库的一行。
Tuple Header,通常包含以下元数据信息.
-
Transaction ID,用于可见性判断.
-
Bit Map for NULL values.
-
Most DBMSs do not allow a tuple to exceed the size of a page.
Unique Identifier
-
每一行通常有一个唯一标识,可用page id + (offset or slot)进行标识