分布式数据库提纲
论述
1. 分布式数据库设计时,为什么要对数据进行分片?什么是关系的片段?关系的片段有哪些主要类型?
分片: 1)应用的视图通常只是关系的一个子集 2) 当应用需要在多个站点上访问同一个关系的几个视图时,要么产生大量不必要的数据访问,要么产生不必要的数据复制 3) 将关系划分成片段,以片段为单位能够支持事务的并发执行
对数据分片的目的是产生一个对全局数据合适的划分方案,使用这种方案得到的片段作为分布式数据库中数据的分配和存储单位时,不但能够减少应用中的操作量,而且能够对于应用具有最大可能的本地性,即使得各片段位于其使用最多的站点。
关系的片段: 对数据库管理系统中的关系进行分割,将分割后得到的各部分元组,就称为该关系的逻辑片段。
关系的片段主要类型有:
(1)水平片段: 按一定的条件把全局关系的所有元组划分成若干不相交的子集,每个子集为关系的一个片段。也是通过对一全局对象的实例(或元组)进行选择得到的子集构。
(2)垂直片段: 把一个全局关系的属性集分成若干子集,并在这些子集上做投影运算,每个投影为垂直分片。也是通过将全局对象在其属性子集上进行投影得到的。
(3)混合分片: 将水平分片与垂直分片方式综合使用则为混合分片。
2. 数据分片应遵守哪些基本原则?数据分片有哪些基本类型和方法?
- 完整 如果一个关系R被分解成多个片段,则每个在R中的数据项也应能在一个或多个
Ri
中找到。 - 重构 如果一个关系R被分解成了多个片段
Fr = {R1,R2,···Rn}
,则应能定义一个关系操作▽
使得R=▽Ri
- 不相交 如果一个关系R被水平地分解成了多个片段
Fr={R1,R2,···Rn}
,并且数据项di
属于Rj
,则di
不属于任何其他的Rk
- **水平分片 ** 使用水平分片方法得到水平片段,水平片段是通过对一全局对象的实例(或元组)进行选择得到的子集构成。
- **垂直分片 ** 垂直片段是通过将全局对象在其属性子集上进行投影得到的
- **混合分片 ** 通过交替水平分片与垂直分片,可以产生混合分片
3.概述基于关系代数等价变换的查询优化算法的基本原理和实现步骤。
基本原理:
- 把查询问题转化为关系代数表达式;
- 分析得到查询树
- 进行全局到片段的变换得到基于片段的查询树
- 利用关系代数等价变换的规则优化算法,尽可能先执行投影和选择操作,后执行连接和合并操作。
- 这样,一方面可以减少其后操作的操作量,另一方面可以减少操作次数.对该查询树进行优化,从而达到查询优化的目的.
步骤:
(1) 将一个查询问题转换成关系代数表达式
(2)从关系代数表达式到查询树的变换:对一个关系代数表达式进行语法分析,可以得到一棵语法树 (或查询树),即查询树根节点是最终的查询结果,叶子节点是查询涉及的所有关系或片段,中间节点是按关系代数表达式中的操作顺序组成的一组关系操作符。
(3)从全局查询到片段查询的变换:把基于全局关系的查询树中的全局关系名,用其重构该全局关系的各个片段名替换,变换成相应片段上的查询树。
(4)利用关系代数等价变换规则优化算法,对片段的查询树进行优化处理,最后达到优化查询目的。
4.概述两阶段提交协议的执行过程。
第一阶段:表决阶段,目的是形成一个共同的决定。协调者向所有参与者发出“准备提交”信息。如果某个参与者准备提交,就回答“就绪” 信息,否则回答撤销信息。参与者在回答之前应把有关信息写入子自己的日志中。协调者在发出准备提交信息前也要把有关信息写入自己的日志中。如果在规定时间内协调者收到了所有参与者“就绪”的信息,则将做出提交的决定,否则撤销。
第二阶段:执行阶段,目的是实现这个决定,协调者将有关决定的信息先写入日志,然后把这个决定发送给所有参与者。参与者收到命令之后首先往日志中写入“收到提交或撤销”决定的信息,并向协调者发送“应答”消息,最后执行有关决定。协调者收到所有参与者的应答消息后,一个事务的执行到此结束,有关日志信息可以脱机保存。
5.采用 DATAID-D 方法的分布式数据库设计与传统的集中式数据库设计在步骤和内容上有什么不同?
DATAID—D是作为集中式数据库设计DATAID一1方法论的扩充而构造的,后者分成四个阶段:需求分析、概念设计、逻辑设计和物理设计。DATAID—D要求对其增加两个阶段:分布要求分析阶段和分布设计阶段:
- 分布要求分析阶段: 需要这一阶段是为了收集关于分布的信息,如水平分片的划分谓词,每一应用在各站点激活的频率等。为了收集关于数据和应用分布的信息,必须从概念设计阶段的某些结果出发来收集关于分布要求。因此,分布要求分析阶段将位于概念设计阶段之后。
- 分布设计阶段: 这一阶段始于全局数据库模式的规格说明和所收集的分布要求,然后产生全局数据的分片模式和片段的位置分配模式,分配模式描述了分配在各站点上的数据情况。
6.描述分布式事务的可串行化理论的一些定义:事务、冲突操作、并发调度、串行调度、一致性调度、两个调度等价、可串行化调度。
- 事务 在分布式系统中,事务是一个分布式操作的序列,被操作的数据分布在不同的站点上。
- 冲突操作 如果两个操作P和Q,对同一个数据X操作,其中至少有一个是写操作W(X)则P和Q称为冲突操作。
- 并发调度 并发事务的一个调度简称并发调度。
- 串行调度
一个事务的第一个动作是在另一个事务的最后一个动作完成后开始
即一个调度中不同事务的各个操作不会相互交叉,每个事务是相继执行的。 - 一致性调度
如果执行一个调度S,可以使得数据库从一个一致性状态转变成另一个一致性状态,则称调度S为一致性调度
显然,串行调度是一致性调度 - 调度等价
调度S1与S2是等价的充分条件是:对于两个有冲突的操作Oi和Oj,若Oi,Oj∈S1
且Oi < Oj
在S1中成立,则Oi,Oj∈S2
,且也有Oi < Oj
在S2中也成立。
冲突等价以及视图等价。 - 可串行化调度
使用优先图判别可串行化调度,如果两个事务Ti
与Tj
发生冲突,且Ti
的操作发生在前,则建立两个节点一条边Ti-->Tj
,通过这种方法建立优先图,如果优先图中不出现环路,则代表调度S是可串行化的调度。
如果一个调度等价于某个串行调度,则该调度称为可串行调度。
7.在分布式数据库系统中如何产生和调整全局时标?讨论基于时标的并发控制技术中的基本时标和保守时标法。
全局时标分配方法:
使用全局的单调递增的计数器,全局的计数器维护是个难题。全局唯一时间的形成与调整:每个站点设置一个计数器 , 每发生一个事务 , 计数器加一。发送报文时包含本地计数器值 , 近似同步各站点计数器。
基本时标法规则:
每个事务在本站点开始时赋予一个全局 唯一时标。在事务结束前,不对数据库进行物理更新。事务的每个读操作或写操作都具有该事务的时标。对每个数据项 x, 记下写和读操作的最大时标,记为 WTM(x) 和 RTM(x) 。如果事务被重新启动,则被赋予新的时标。
保守时标法规则:
每个事务只在一个站点执行 , 它不能激活远程的程序 , 但是可以向远程站点发读写请求。站点 i 接收到来自不同站点 j 的读写请求必须按时标顺序,即每个站点必须按时标顺序发送读写数据请求,在传输中也不会改变这个顺序。每个站点都为其它站点发来的读 写操作开辟一个缓冲区分别保存收到的读写申请 。
8.乐观并发控制技术和其他的并发控制技术的异同,为什么它们也被称为确认或者验证技术?讨论一个乐观并发控制方法的典型阶段。
- 悲观并发控制 假设事务之间的冲突是比较频繁的,它们不允许两个事务同时对一个数据项进行冲突的访问。只有这个锁的所有者释放该锁,其他用户才能执行与该锁冲突的操作。
- 乐观并发控制 用户读取数据时不锁定数据。当一个用户更新数据时,系统将进行检查,查看该用户读取数据后其他用户是否又更改了该数据。如果其他用户更新了数据,将产生一个错误。一般情况下,收到错误信息的用户将回滚事务并重新开始。
乐观并发控制:读取阶段、校验阶段以及写入阶段
假设A和B需要在SCC上修改同一个文件,他们都将这个文件获取到自己的机器上,A修改完以后,就把文件上传到SCC上了,此时B也修改完了,当他也打算将文件上传时,系统会告知B,已经有人上传了,并出现一个错误。剩下的问题只能由B手动解决,例如B可以在SCC上将文件中更改的内容再次复制一遍。乐观并发控制使得系统效率损耗在事务的后期处理中,比如B必须手动的去修改他已经修改过的东西,然而这种控制方式在极少出现冲突的多事务处理中显得十分高效。
9.掌握三阶段提交协议中事务状态转换图,并结合图简述其原理。
10. 为什么说可串行化是个过于严格的正确性条件?请给出一个例子,能保证一致性,却不是可串行化的。
串行调度对不会引起冲突的操作要求过高,它们可以进行并行操作。如果两个操作之间存在冲突,这两个操作的执行顺序就很重要;而对于两个不会引起冲突的操作,它们的执行顺序则并不重要。可见事务的并发控制主要是正确处理并行执行的事务对数据库的冲突操作。
11.什么是三阶段提交协议?讨论三阶段提交协议的终结协议和三阶段提交协议的恢复协议。
三阶段提交协议:在2PC的等待状态和提交状态之间增加一个状态,作为一个缓冲,用于在准备提交但是还没有提交的时候。因为从初始状态到提交状态之间有三次状态转换,所以称为三阶段提交协议。
三阶段提交协议的终结协议:
1.协调者超时
在等待状态时超时,协调者让该事物全局回滚。
在准备提交状态超时,协调者给参与者发送“准备提交”消息,使他们进入准备提交状态并将提交记录记入日志。
在提交状态超时,此时,终结协议应该通过选举新的协议者来终结事务。
在回滚状态超时,此时,终结协议应该通过选举新的协议来终结事务。
2.参与者超时
在初始状态时,参与者单方面放弃。
在就绪状态超时,通过选举新的协议来终结事务。
在准备提交状态超时,通过选举新的协议来终结事务。
三阶段提交协议的恢复协议:
1.协调者在等待状态失效
参与者已经终结的事物,隐藏,在恢复时,协议者必须向他们询问以确定如何终结事务。
2.协调者在预备提交状态失效
终结协议再一次知道可操作参与者的终结事务。由于在这个过程中可以从预备提交状态转换到撤销状态,协调者必须询问以确定如何终结事物。
3.一个参与者在预备提交状态失效
它必须询问以确定其他参与者如何终结事物。
12. 概述基于直接连接算法查询优化的基本原理和适用情形。
1.利用站点依赖信息的算法
2.分片和复制的算法
3.站点依赖和分片复制结合的算法
4.Hash划分算法
站点依赖的数据传输量最小,连接数据量最小且能利用索引,但是站点依赖算法只有给出适当的划分信息时才能使用;Hash划分算法在具有相对均匀的数据分布时才能得到良好的性能。
分析设计
1.为什么说在关系型分布式数据库中使用导出式水平分片,使关系之间的连接变得更加容易?试举一例。
全局关系的导出式水平分片不是以其自身的属性性质为基础,而是从另一个关系的属性性质或水平片段推导出来的。采用导出分片可以使片段与片段之间的“连接”(join)变得更容易。
全局关系SC(S#.C#,SCORE),S(S#,SNAME,AGE,SEX)
若要将SC划分为男生的各门课成绩和女生的各门课成绩。这就不可能从SC本身的属性性质来执行选择,必须从关系S的属性性质或水平片段来导出。
select SC.S#,C#,SCORE from SC,S
where SC.S#=S.S# and SEX=’M’
define fragment SC2 as
select SC.S#,C#,SCORE from SC,S
where SC.S#=S.S# and SEX=’F’
如果S已经进行水平分片,分为SF、和SM,分别为男生全体和女生全体,则上述的片段定义可以基于片段SF和SM导出:
select*from SC where S# in(select SF.S# from SF)
define fragment SC2 as
Select * from SC where S# in(select SM.S# from SM)
由此可见,使用导出式水平分片,使关系之间的连接变得更加容易。这是因为可将连接条件代之以子查询,从而使它变为一般的判别条件。
2.讨论两阶段提交协议的终结协议和两阶段提交协议的恢复协议
两阶段提交协议的终结协议: 终结协议在协调者和参与者的定时器超时发挥作用,超时发生在目的站点在期望的时间内没有从发送站点得到所期望的消息时。处理超时的方法依赖于失效发生的时间和失效的类型。协调者可以再三种状态中发生超时:等待、提交和撤销。
两阶段提交协议的恢复协议:
1.协调者站点失效
(1)协调者在初始状态失效:它将在恢复时启动提交过程
(2)在等待状态失效:协调者从头开始启动提过程,再次发送“准备”
在提交状态或者撤销状态
在恢复时如果它已经收到所有的确认消息他就不需要做任何事情。否则,就要启动终结协议。
2.参与者站点失效
(1)在初始状态失效:在恢复时请参与者单方面撤销事务
(2)在就绪状态失效:失效站点的的参与者启动终结协议来处理
(3)提交或撤销状态失效:不需要爱去任何专门的措施
3.考虑下图公司数据库的分片和分布情况
假设该公司有 3 个计算机站点,站点2和3分别属于部门2和3。现在希望在站点2和3上分别频繁访问EMPLOYEE和 PROJECT 表中有关工作在该部门的雇员和该部门管辖的项目信息。雇员信息主要是指 EMP 表中的 NAME、SSN、SALARY 和 SUPERSSN 属性。站点 1 供公司总部(部门 1)使用,除了经常存取为社会保险目的而记录的 DEPENDENT 信息外,还定期地存取所有雇员和项目的信息。根据给出的这些要求,对COMPANY 关系数据库中的关系进行分片和分布设计。(注:主键用下标线标出)
4. 有如下两个事务:
请给出各种可能的调度,并指出各自属于哪些类型的调度(串行调度、一致性调度、可串行化调度等)。
$ S_1 = { R_1(x),x: = x+10, W_1(x), R_1(y),y: = y-15,W_1(y),C1,R_2(x),x: =x-20, W_2(x),R_2(y),y:=y2,W_2(y),C2 } $
$ S_2 = R_1(x),x:=x+10,W_1(x),R_2(x),x:=x-20, W_2(x),R_1(y),y:=y-15,W_1(y),C1,R_2(y),y:=y2,W_2(y),C2$
$ S_3 = R_1(x),x:=x+10,W_1(x),R_2(x),x:=x-20,W_2(x),R_2(y),y:=y2, W_2(y),C2,R_1(y),y:=y-15,W_1(y),C1 $
$ S_4 = R_2(x),x:=x-20,W_2(x),R_2(y),y:=y2,W_2(y),C2,R_1(x),X:=x+10,W_1(x),R_1(y),y:y-15,W_1(y),C1 $
S
5
=
R
2
(
x
)
,
x
:
=
x
−
20
,
W
2
(
x
)
,
R
1
(
x
)
,
x
:
=
x
+
10
,
W
1
(
x
)
,
R
2
(
y
)
,
y
:
y
=
2
,
W
2
(
y
)
,
C
2
,
R
1
(
y
)
,
y
:
=
y
−
15
,
W
1
(
y
)
,
C
1
S_5 = R_2(x),x:=x-20,W_2(x),R_1(x),x:=x+10,W_1(x),R_2(y),y:y=2,W_2(y),C2,R_1(y),y:=y-15,W_1(y),C1
S5=R2(x),x:=x−20,W2(x),R1(x),x:=x+10,W1(x),R2(y),y:y=2,W2(y),C2,R1(y),y:=y−15,W1(y),C1
- 调度S1和S4是串行调度,也是一致性调度
- 调度S2和S1的冲突操作具有相同的序,因此是等价的调度,S2是可串行化调度,也是一致调度。
- 调度S3虽然是一个一致调度,但不是一个可串行化调度
- 调度S5和S4等价,所以S5是一致调度,也是可串行化调度、
5.设有关系 R、S、T,如下图所示。
(1) 计算连接 R∞S∞T。
(2) 计算半连接 R∝S, S∝R,S∝T,T∝R,T∝S,R∝T。
(3) 上述三个关系 R,S,T 分别位于三个不同的站点 X、Y、Z。若采用基于半连接算法计算连接 R∞S∞T,请选择是的传输代价最少的连接执行的站点和确定半连接序列。
6.设某公司的雇员关系 Employee(Name, Address, Salary, Plant-number),按照 Plant-number 水平分片这个关系,每个片段都有两个副本:一个副本存放在 New York 站点,另一个副本存放在工厂所在地站点。在 Toronto 站点提出的下列查询设计一个好的处理策略。
(1)找出 Boce 厂的所有雇员。
直接从Boce的employee分段中投影出employee的name属性,再将其发送到Toronto站点,呈现给所需用户。
(2)找出所有雇员的平均工资。
在New York站点将所有分段数据中的employee的salary相加,取平均值,计算完毕之后再将该值发送到Toronto站点。
(3)找出在如下每个站点工资最高的雇员姓名:Toronto,Edmonton,Vancouver,Montreal。
对各个站点的各自的工资进行降序排列(以salary的值为标准),选出salary的max值,对其name属性做投影,将数据发送到Toronto站点。
(4)找出该公司中工资最低的雇员姓名
各站点中降序排列(salary),选出各站点的min(salary)发送到Toronto站点,再将各自的salary作比较,对最小值的employee的name属性做投影。