一:RBDMS系统架构
SQL Parse:
SQL 语句的程序解析好的内部表达
(例如:parsing tree)
语法解析,语法检查,表名、列名、类型检查
Query Optimizer :
SQL内部表达Query Plan (执行方案)
产生可行的query plan
估计query plan的运行时间和空间代价
在多个可行的query plans中选择最佳的query plan
Data storage and indexing
如何在硬盘上存储数据
如何高效地访问硬盘上的数据
• Buffer pool:
在内存中缓存硬盘的数据
Execution Engine :
• query planSQL语句的结果
根据query plan,完成相应的运算和操作
数据访问
关系型运算的实现
Transaction management:事务管理
目标是实现ACID
进行logging写日志,locking加锁
保证并行transactions事务的正确性
数据存储在外存(硬盘 )
二:数据的存储与访问
数据表(Table)
索引(Index)
缓冲池(Buffer pool)
数据库 vs. 文件系统(数据存储角度比较)
• 文件系统
存储文件(file)
通用的,存储任何数据
和程序
文件是无结构的,是一
串字节组成的
操作系统内核中实现
提供基本的编程接口
– Open, close, read, write
13
• 数据库
存储数据表(table)
专用的,针对关系型数
据进行存储
数据表由记录组成,每
个记录由多个属性组成
用户态程序中实现
提供SQL接口
• 共同点
数据存储在外存(硬盘)
根据硬盘特征,数据分成定长的数据块
数据在硬盘上的存储
一个page 一个一维的地址空间
一个page 可以设置为1~多个文件系统的 page,例如,4KB, 8KB, 16KB, …
数据的访问:
Hash based index:
在硬盘上怎么存?
bucket = page
当chain上平均bucket数太多时,需要增大size,重新hashing
(存在hash table design可以降低re-hashing的代价)
一个bucket对应一个page
B+Trees:
B+Trees存储
B+Trees检索
进行二分查找
Search 然后在节点中插入
叶节点未满,插入叶节点
叶节点满了,node split(节点分裂)
Range Scan
找到起始叶结点,包括范围起始值
沿着叶的链接读下一个叶结点
直至遇到范围终止值