数据库
1. E-R模型理解需求并建模的步骤
1.1 chen方法
- 理解需求,寻找实体;
- 用属性刻画每一个实体;
- 确定每个实体的key;
- 数据建模的重点是分析实体之间的联系。标记联系基数很重要。不同基数可能会导致不同设计方案。
- 检查是否覆盖了需求
1.2 crow’s foot方法
2. 信息
信息抽象与具体化,需要知道哪些需要描述,哪些问题相关?
数据库设计往往因为忽视了**信息(之间联系)的细致分析而造成设计失误。数据库设计能力的高低往往体现在信息(及其联系)**的正确分析上,体现在理解现实世界能力的高低。
3. 事务
1.并发控制思想
-
时间戳
- 采用系统时间作为时间戳,只要确保调度器在一个时钟周期内不会调度两个以上事务的;
- 采用计数器,单调递增,作为事务的逻辑时间戳;
为了使用时间戳进行并发控制,在每一个数据库元素上需要两个时间戳和一个提交位,即:
- RT(X),X最近一次被读取的时间戳;
- WT(X),X最近一次被写入的时间戳;
- C(X), X的提交位,表示最近一次X的修改是否已经被提交;该位主要目的是避免U对X进行修改,T读取X,而U最后被中止的情况;
-
有效性确认
2.1 数据结构
对于每一个事务T,将维护读集合RS(T)和写集合WS(T),并且将事务分成三个阶段:
- **读。**读取数据库中所有所需的元素RS(T),并做相对应的计算;
- **有效性确认。**比较该事务与其他事务的读写集合确认事务T的有效性;
- **写。**经过有效性确认后,事务往数据库中写入其集合中元素的值;
此外,调度器还需要维护下面三个集合:
- START,已经开始但未完成有效性确认的事务集合,并记录每个事务的开始时间START(T);
- VAL,已经确认但未完成的事务集合,并记录事务的开始时间START(T)和确认时间VAL(T);
- FIN,已经完成写阶段的事务,将记录事务的开始时间START(T)、确认时间VAL(T)和结束时间FIN(T)。
2.2 有效性确认规则
基于以上数据结构,调度器将根据这些数据做出正确的判断规则,具体如下:
- 假如事务U,有:
1.1 U在VAL中,即事务U已经被确认;
1.2 FIN(U) > START(T),事务T开始时,U未结束;
1.3 RS(T) and WS(U) 不为空;
事务T在事务U后开始,但是事务T可能读X在事务U写之前,存在事实上不可实现。即后开始的事务读到的值是旧值,此时需要将事务T进行回滚。
- 假如事务U,有:
2.1 U在VAL中,U已经完成有效性确认;
2.2 FIN(U) > VAL(T), 事务T确认之前,事务U没有结束;
2.3 WS(T) and WS(U)不为空,如X;
以上条件下,如果确认事务T,那么事务T就可能在事务U之前写入X,而产生事实上不可实现,因此需要对T进行回滚。
以上两个条件是有效性确认必须要满足的规则。
-
总结
这里将对封锁,时间戳,有效性确认三种并发控制进行简单分析总结。
封锁:在写冲突较多的时候,封锁具有更高的性能,因为封锁过程中,将推迟事务。但是封锁的锁空间与被封锁元素的个数成正比。
时间戳:乐观的并发控制在冲突较少时,即只读事务较多时性能较好。但是在高冲突情况下,将会产生大量的回滚,降低性能。同样地,所需的空间与数据库元素成正比,但是在一些实现中,往往将长时间不访问的看作是“最小时间戳”,可以对空间进行优化。
有效性确认:空间与当前活跃的事务成正比;且需要回滚时,相比于时间戳,有效性确认方法一般较晚。