150 likes | 329 Views
第9章 网络数据管理. 9.1 网络数据库的并发控制 9.2 网络数据库的安全机制 9.3 网络数据库的访问控制 9.4 网络数据存储 9.5 网络环境下数据备份与恢复 9.6 Web 数据管理. 9.1 网络数据库的并发控制. 9.1.1 事务 9.1.2 并发控制的必要性 9.1.3 基于锁的并发控制技术 9.1.4 其它并发控制技术. 9.1.1 事务. 并发控制 是指在网络环境下对数据库的并发操作进行规范的机制。 并发控制的作用 主要是协调同一时间访问同一数据库文件的多个事务之间的关系,防止这些事务之间发生冲突。
E N D
第9章 网络数据管理 • 9.1 网络数据库的并发控制 • 9.2 网络数据库的安全机制 • 9.3 网络数据库的访问控制 • 9.4 网络数据存储 • 9.5 网络环境下数据备份与恢复 • 9.6 Web数据管理
9.1 网络数据库的并发控制 • 9.1.1 事务 • 9.1.2 并发控制的必要性 • 9.1.3 基于锁的并发控制技术 • 9.1.4 其它并发控制技术
9.1.1 事务 • 并发控制是指在网络环境下对数据库的并发操作进行规范的机制。 • 并发控制的作用主要是协调同一时间访问同一数据库文件的多个事务之间的关系,防止这些事务之间发生冲突。 • 事务(transaction)是数据库的逻辑工作单元,它是一组对数据的操作序列。事务是并发控制的基本单位。 • 事务具有以下四个基本特性: • 原子性 • 一致性 • 隔离性 • 持续性
9.1.2 并发控制的必要性 • 数据库并发操作导致数据不一致性的三种情况: • 1. 丢失更新 • 当两个事务T1和T2读入同一数据,并发执行修改操作时,T2把T1或T1把T2的修改结果覆盖掉,造成了数据的丢失更新(lost update)问题,导致数据的不一致。它是由于两个事务对同一数据并发写入引起的,称为写-写冲突。
9.1.2 并发控制的必要性 • 2. 脏读 • 事务T2读取了T1更新后的数据R,其后T1由于某种原因撤销修改,数据R恢复原值,导致T2得到的数据与数据库的内容不一致。这种由于一个事务读取另一个更新事务尚未提交的数据引起的不一致问题,被称为脏读(dirty read)。 • 3. 不可重读 • 事务T1读取数据R后,T2读取并更新了R,当T1再次读取R时,得到的两次读取值不一致,这种现象被称为不可重读(unrepeatable read)。
9.1.3 基于锁的并发控制技术 • 基于锁的并发控制是事务对数据操作前必须获得对该数据的锁,完成操作后在适当时候释放锁,而得不到锁的事务处于等待状态。 • 锁是数据项上的并发控制标志,它有两种类型: • 共享锁(Shared Lock,简称S锁) • 排它锁(Exclusive Lock,简称X锁)
9.1.3 基于锁的并发控制技术 • 1. 封锁协议 • 系统中的事务在加锁和释放锁时,都必须遵守一组规则,这组规则称为封锁协议。 • 一级封锁协议 • 一级封锁协议是事务在修改数据R之前必须对其加X锁,直到事务结束,如果未能获得X锁,则该事务进入等待状态,直至获得X锁才能执行。 • 二级封锁协议 • 二级封锁协议是在一级封锁协议的基础上,规定事务在读取数据R之前必须对其加S锁,读完后释放S锁。
9.1.3 基于锁的并发控制技术 • 三级封锁协议 • 三级封锁协议是在一级封锁协议的基础上,规定事务在读取数据R之前必须对其加S锁,读完后并不释放S锁,直到整个事务结束后才释放。 • 2. 封锁粒度 • 封锁粒度是指封锁的数据对象的大小。 • 封锁粒度与系统的并发度和并发控制的开销密切相关。封锁粒度越小,并发度越高,并发控制的系统开销也就越大。反之,封锁粒度越大,并发度越低,并发控制的系统开销也就越小。
9.1.3 基于锁的并发控制技术 • 3. 死锁 • 如果一个事务申请锁未成功,则须等待其它事务释放锁,这就形成了事务之间的等待关系。当事务中出现循环等待时,如果不加干预,就会一直等待下去,这种状态称为死锁。 • (1)死锁的检测和处理 • 死锁检测的方法一般有以下两种: • 超时法 • 等待图法
9.1.3 基于锁的并发控制技术 • 数据库管理系统对死锁一般采用如下策略: • 在循环等待的事务中,选择一个事务作为牺牲者,给其他事务“让路”。 • 回滚牺牲的事务,释放其获得的锁即其他资源。 • 将释放的锁让给等待它的事务。 • 选取牺牲事务的方法有以下几种: • 选择最迟交付的事务作为牺牲者。 • 选择获得锁最少的事务作为牺牲者。 • 选择回滚代价最小的事务作为牺牲者。
9.1.3 基于锁的并发控制技术 • (2)死锁的预防 • 数据库系统中预防死锁常用的方法有以下两种: • 一次加锁法 一次加锁法是在事务执行前,对要使用的所有数据对象一次加锁并要求加锁成功,只要一个加锁不成功,即表示本次加锁失败,立即释放所有加锁成功的数据对象,然后重新开始加锁。 • 顺序加锁法 顺序加锁法是对所有可能封锁的数据对象按序编号,规定一个加锁顺序,每个事务都按此顺序加锁,释放时则按逆序进行。
9.1.4 其它并发控制技术 • 1. 基于时间戳的并发控制技术 • 为了区别事务开始执行的先后,每个事务在开始执行时,都由系统赋予一个唯一的、随时间增长的整数,称为时间戳(TS,Time Stamp)。 • 基于时间戳的并发控制是按时间戳的顺序对冲突进行处理,使一组事务的交叉执行等价于一个由时间戳确定的串行序列,其目的是保证冲突的读操作和写操作按照时间戳的顺序执行。
9.1.4 其它并发控制技术 • 基于时间戳的并发控制遵循以下准则: • 事务开始时,赋予事务一个时间戳。 • 事务的每个读操作或写操作都带有该事务的时间戳。 • 对每个数据项R,最后一次读该数据项的时间戳值为RTM(R),最后一次写该数据项的时间戳值为WTM(R)。 • 当事务对数据项R请求读操作时,设该读操作的时间戳为TS,如果TS<WTM(R)则拒绝该读操作,事务回滚,并用新的时间戳重新启动该事务,否则执行读操作,若原RTM(R)<TS,则更新RTM(R)为TS。 • 当事务对数据项R请求写操作时,设该写操作的时间戳为TS,如果TS<RTM(R)或TS<WTM(R)则拒绝该写操作,事务回滚,并用新的时间戳重新启动该事务,否则执行写操作并把WTM(R)置为TS。
9.1.4 其它并发控制技术 • 2. 基于版本的并发控制技术 • 基于版本的并发控制方法是将版本管理引入到数据库应用中。数据库版本是数据库的一个视图,它反映了数据库在某种情况下的数据存储情况。多用户版本是指同一数据库在一次完整的设计过程中,对不同用户及同一用户在此过程中的不同时刻的多个数据视图。 • 在应用开始时,每个应用将初始数据读至自己的工作区,形成该任务的初始版本。在任务的执行过程中,每一应用在自己的工作区内对数据进行操作,利用版本来记录每次操作的结果。由于操作是在各自的工作区内完成,所以可以并行进行,互不干扰。各任务结束后,将各任务的最终版本进行合并。
9.1.4 其它并发控制技术 • 3.基于事务类的并发控制技术 • 利用存储过程来访问数据库,假设每个存储过程属于一个互不相交的冲突类。一个冲突类里的过程仅存取数据库中的某一特定部分,而不同的冲突类则工作在数据库的不同部分。 • 对每一个冲突类C均存在一个先进先出(FIFO,First In First Out)的类队列(CQ,Class Queue)。当一个事务T开始且T∈C,T被加入到CQ中。若T是队列CQ中唯一的事务,则T将被提交给数据管理器去执行;若在队列CQ中还有其它的事务,则T等待。当一个事务成为队列中的第一个事务并提交后,则从相应的队列中移出该事务,队列中下一个在等待的事务被提交执行。