数据库原理

2020-07-11  本文已影响0人  谭英智

记录物理存储

定长记录

database-fixlength

变长记录

database-changelength

多记录存储

物理邻接存储

database-record-toget

指针连接存储

database-record-link
database-record-link2

大字段存储(BLOBS)

database-blobs

文件组织方式

索引

聚集索引

索引的顺序与数据文件的顺序一致,例如mysql的主键索引,一般一个表只有一个聚集索引

辅助索引

索引的顺序与数据文件的顺序不一致,索引的值为主键,需要通过二级查询才能到达记录

稠密索引

为每个键建立索引

稀疏索引

在顺序文件中,只为每个块建立一个索引键

有序索引

索引是按序排列的,例如B+树索引

散列索引

索引是无序的,通过hash来访问数据

静态散列
动态散列
database-hash-extended

多级索引

使用稠密和稀疏索引建立多级索引

查询与优化

查询代价的度量

响应时间 = 磁盘存储时间+CPU运算时间+数据传输时间

对于本地大型数据库一般只考虑磁盘存取时间

查询处理过程

database-sql database-yufatree database-sql-logic database-sql-logic-opt database-sql-search

关系查询算法

选择/投影/连接

查询算法

一趟排序算法

实现的算法包括并,交,差,消除重复元组

如果内存可以至少容纳一个表的数据,可以把一个表的数据全部加载在内存,然后对键进行排序,然后通过扫描第二表表,一趟把结果计算出来

多趟排序算法

在两个表的数据都非常非常大,此时则需要先用归并算法得出两个表的排序记录,然后再在内存堆两个排序表进行并交差等运算,运算的过程中设计多次的磁盘读入和写出

多趟散列算法
基于索引的算法

运算过程方式

实体化方法

每次运算的中间结果重新写回磁盘,下一个运算再次从磁盘读取中间结果并进行再次运算,直到得出结果

流水式方法

每次运算的中间结果保存在内存,下次运算直接从内存获得中间结果并进行再次运算,直到得出结果

查询优化

故障恢复

事务

特定ACID

日志

SQL执行过程
日志记录的信息
undo日志
规则
恢复机制

从后往前找日志,把没有Commit T的事务进行撤销

检查点

检查点包括开始部分和结束部分

开始节点对目前正在活动的事务IdList进行记录

如果数据库检查到所有的IdList都已经完成,则打印一个结束检查点

缺点

频繁将数据更新到磁盘,导致性能不高

redo日志
规则
恢复机制

重做已经提交的事务

检查点

与undo类似,只是把撤销改成重做

事务并发

问题

调度

串行调度

两个事务,按照顺序一个接一个的执行

可串行化调度

两个事务,通过指令穿插的方式执行,执行的结果与串行执行的结果一致

冲突可串行化调度
不可串行化调度

在某个事务的一个并发结果与串行化调度的结果不一致

保证可串行化的预防型策略

加锁产生的问题
两阶段锁协议
严格两阶段锁

在提交前释放锁

遵循两阶段锁的并发控制算法是冲突可串行化调度。但仍然存在死锁和级联回滚的发生。

强两阶段锁

在提交之前不允许释放任何锁

可以避免级联回滚,但依然存在死锁

多粒度锁
database-lock-multi-item
意向锁
可串行化多粒度锁协议
database-lock-multi-matric
死锁

选择事务回滚的策略:

基于时间戳的调度协议

保证可串行化的预防型策略

执行协议

基于有效性检验的调度协议

保证可串行化的诊治型策略

协议的术语

有效性检查失败情况
规则

对于T和先于它执行的U满足以下某一条件,则U和T可串行化

事务隔离性级别

严格执行隔离会严重降低吞吐量,因此需要系统根据应用灵活设置隔离级别

上一篇 下一篇

猜你喜欢

热点阅读