分布式数据库文档格式.docx
《分布式数据库文档格式.docx》由会员分享,可在线阅读,更多相关《分布式数据库文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
Student2=SLdno=2Student
Studen3=SLdno=3Student
2)从数据分片的正确性判剧来说明这种分片是满足正确性判剧的:
1完整性:
因为{dno=1}∈{dno={1,2,3}},{dno=2}∈{dno={1,2,3}},
{dno=3}∈{dno={1,2,3}},并且,Student集合中有且只有{dno=1},{dno=2}和{dno=3}这三个元素,满足完整性。
2可重构性:
因为,{dno={1,2,3}}={dno=1}∪{dno=2}∪{dno=3},
所以满足可重构性。
3不相交性:
因为,{dno=1}∩{dno=2}={dno=1}∩{dno=3}={dno=2}∩{dno=3}=空集
所以,限定语dno相斥,片段之间不相交,满足不相交性。
综上,这种分片是满足正确性判剧的
3答:
a.LEVEL1:
read(terminal,$sno)
Selectsname,age,dno,typeinto$sname,$age,$dno,$type
fromStudent
wheresno=$sno
write(terminal,$sname,$age,$dno,$type)
LEVEL2:
fromStudent1
ifnot#FOUNDthen
fromStudent2
LEVEL3:
read(terminal,$sno)
Selectsname,age,dno,typeinto$sname,$age,$dno,$type
fromStudent1atsite1
fromStudent1atsite2
fromStudent2atsite3
fromStudent2atsite4
b.答:
LEVEL1:
UpdateStudent
Setdno=2
Wheresno=060138
LEVEL2:
(sno为主键)
Selectsnameinto$SNAMEfromstudent1
If#FOUNDthen
Updatestudent1
Else
Updatestudent2
LEVEL3:
Selectsnameinto$SNAMEfromstudent1atsite1
Wheresno=060138
Updatestudent1atsite1
Setdno=2
Wheresno=060138
ElseSelectsnameinto$SNAMEfromstudent1atsite2
Updatestudent1atsite2
Wheresno=060138
ElseSelectsnameinto$SNAMEfromstudent2atsite3
Updatestuden2atsite3
Setdno=2
Else
Updatestuden2atsite4
4答:
因为分片原则是:
完备性,可重构性,不相交性。
这里:
P1vP2=true
Reconstruction
P1=!
P2
这两个断言可能不满足上述原则,原因是不能保证职位就只有manager和programmer这两个,故此应修改如下:
P1:
title=“manager”
P2:
title≠“manager”;
这样就满足了上述要求。
5答:
连接图如下:
Emp1
Emp2pay1
Emp3pay2
Emp4
这里采用partitionedgraph部分连接,可采用半连接方式进行查询优化,采用半连接可以减少站之间的数据输出量,但同时要增加通信次数和本地处理时间。
所以一般需要在全连接与半连接之间进行连接。
6.设:
C0=0,C1=1。
所有可选的Semi-Join:
Semi-Join
Selectivity
Benefit
Cost
P1:
RNSJB=BU
(P1)=20/50=0.4
0.6*(3+4+25)*5,000=96,000
4*20=80
P2:
RNSJA=AS
(P2)=20/100=0.2
0.8*(3+4+25)*5,000=128,000
3*20=60
P3:
UNSJB=BR
(P3)=1
-
4*50=200
P4:
UNSJC=CS
(P4)=5/10=0.5
0.5*(4+2+20)*100=1,300
2*5=10
P5:
SNSJA=AR
(P5)=1
3*100=300
P6:
SNSJC=CU
(P6)=1
2*10=20
选P2先做,对R的影响:
card(R)=0.2*5,000=1,000
n=5,000r=1,000mB=50mE=500
R
A
B
E
Size
3
4
25
Val
20
50
500
剩下的Semi-Join:
0.6*(3+4+25)*1,000=19,200
选P1先做,对R的影响:
card(R)=0.4*1,000=400
n=1,000r=400mA=20mE=500
300
SNSJA=AR
选P4先做,对U的影响:
card(U)=0.5*100=50
n=100r=50mB=20mD=100
U
C
D
2
5
只有Cost没有Benefit,故停止。
选择收集数据的站点:
cost(Site1)=(3+2)*20+(4+2+20)*50=1,400
cost(Site2)=(3+4+25)*400+(4+2+20)*50=14,100
cost(Site3)=(3+4+25)*400+(3+2)*20=12,900
所以,选择Site1收集数据。
7
PairsofconflictingoperationinS1:
W2(x)<
W1(x),W2(x)<
R3(x),W2(x)<
R1(x),W1(x)<
R3(x),W1(x)<
R2(x),W2(y)<
R3(y)
PairsofconflictingoperationinS2:
R3(y)<
W2(y),W1(x)<
W2(x),R3(x)<
W2(x),W2(x)<
R1(x)
PairsofconflictingoperationinS3:
R1(x),W2(x)<
R3(x),R3(x)<
W1(x),W2(y)<
PairsofconflictingoperationinS4:
R3(x),W2(y)<
R3(y),W1(x)<
R3(x)
所以S1isconflictequivalenttoS3.
8答:
Execution1:
S1:
Ri(x)Rj(x)Wj(y)Wi(x)可串行化为:
TjTi
S2:
Ri(w)Rj(z)Wj(w)Wi(w)
∵S2中Ti、Tj为互相冲突的事务对,且在两个本地调度中的序不一致
∴execution1是不可串行的。
Execution2:
Ri(x)Rj(x)Wj(y)Wi(y)可串行化为:
Wi(z)即为:
Ti
∴execution2可串行化为:
序列1:
Rj(x)Wj(y)Ri(x)Wi(z)Wi(y)
序列2:
Ri(x)Wi(y)Rj(x)Wj(y)Wi(z)
Execution3:
Ri(x)Rj(x)Wi(x)Wj(y)可串行化为:
Ri(z)Rj(z)Wj(z)Wi(w)可串行化为:
TiTj
∴execution3可串行为:
可串行序列为:
Rj(x)Wj(y)Ri(x)Wi(x)Ri(z)Wi(w)Rj(z)Wj(z)
Execution4:
Ri(y)Rj(x)Wj(x)可串行化为:
TiTj或者TjTi(选择后者)
Wi(z)Ri(w)Rj(w)Wi(w)可串行化为:
∴execution4可串行化为:
Ri(y)Rj(x)Wj(x)Rj(w)Ri(w)Wi(z)Wi(w)
Rj(w)Rj(x)Wj(x)Ri(w)Ri(y)Wi(z)Wi(w)
Rj(x)Rj(w)Wj(x)Ri(y)Ri(w)Wi(z)Wi(w)
Rj(x)Rj(w)Wj(x)Ri(w)Ri(y)Wi(z)Wi(w)
9:
1.
∵Ts(Ti)<
Ts(Tj)所以先执行事务Ti
∵Ts(Ti)>
WTM(x)所以Ri(x)且RTM(x)=35
=WTM(x)且Ts(Ti)>
=RTM(x)所以Wi(x)且WTM(x)=35
∵Ts(Ti)>
WTM(y)所以Ri(y)且RTM(y)=35
=WTM(y)且Ts(Ti)>
=RTM(y)所以Wi(y)且WTM(y)=35
再执行事务Tj
∵Ts(Tj)>
WTM(x)所以Rj(x)且RTM(x)=40
=WTM(x)且Ts(Tj)>
=RTM(x)所以Wj(x)且WTM(x)=40
WTM(y)所以Rj(y)且RTM(y)=40
=WTM(y)且Ts(Tj)>
=RTM(y)所以Wj(y)且WTM(y)=40
2.
Ts(Tj)先执行事务Ti
∵Ts(Ti)<
WTM(x)拒绝该操作,事务退出
WTM(x)Rj(x)且RTM(x)=40
=RTM(x)Wj(x)且WTM(x)=40
WTM(y)Rj(y)且RTM(y)=40
=RTM(y)Wj(y)且WTM(y)=40
3.
Ts(Tj)先执行事务Tj
WTM(x)Rj(x)且RTM(x)=35
=RTM(x)Wj(x)且WTM(x)=35
WTM(y)Rj(y)且RTM(y)=35
=RTM(y)Wj(y)且WTM(y)=35
再执行事务Ti
WTM(x)Ri(x)且RTM(x)=40
=WTM(x)且Ts(Ti)>
=RTM(x)Wi(x)且WTM(x)=40
WTM(y)Ri(y)且RTM(y)=40
=RTM(y)Wi(y)且WTM(y)=40
找不到10和11
10
11
12.
ROOT_AGENT:
Read(Terminal,$AMOUNT,$FROM_ACC,$TO_ACC);
Write(log,trsID,“begin_transaction”);
Begin_transaction;
SelectAMOUNTinto$FROM_AMOUNT
FromACCOUNT
WhereACCOUNT_NUMBER=$FROM_ACC;
If$FROM_AMOUNT-$AMOUNT<
0then
Begin
Write(log,trsID,”abort”);
abort;
end;
Elsebegin
UpdateACCOUNT
SetAMOUNT=AMOUNT-$AMOUNT
WhereACCOUNT_NUMBER=$FROM_ACC;
CreateAgent1;
Send(trsID,Agent1,$AMOUNT,$TO_ACC);
Write(log,trsID,”prepare”);
Send(trsID,Agent1,“prepare”);
Receive(trsID,Agent1,message,timeout,ok);
Ifok=falseormessage=“abort”then
Begin
Write(log,trsID,“glbal_abort”);
Send(trsID,Agent1,“abort”);
End;
Elsebegin
Write(log,trsID,“global_commit”);
Send(trsID,Agent1,”commit”);
Receive(trsID,Agent1,message,timeout,ok);
Write(log,trsID,“complete”);
Commit;
End;
Agent1:
Receive(trsID,ROOT_AGENT,$AMOUNT,$TO_ACC);
Receive(trsID,ROOT_AGENT,message,timeout,ok);
Lock(trsID,tupleID,exclusive,timeout,ok);
Ifok=truethen
Begin
Write(log,trsID,“begin_transaction”);
Write(log,trsID,”ready”);
Send(trsID,ROOT_AGENT,“ready”);
End;
Write(log,trsID,“abort”);
Send(trsID,ROOT_AGENT,“abort”);
Abort;
Receive(trsID,ROOT_AGENT,message,timeout,ok);
Ifmessage=“abort”then
Send(trsID,ROOT_AGENT,“ack”);
Elseifmessage=“commit”then
begin
write(log,trsID,“commit”);
send(trsID,ROOT_AGENT,“ack”);
UpdateACCOUNT
SetAMOUNT=AMOUNT+$AMOUNT
WhereACCOUNT_NUMBER=$TO_ACC;
Unlock(trsID,tupleID);
13.
一个调度S中,各个事务的操作执行时不叠加(即一个接着一个发生),则这个调度是串行的(serial)。
一个调度Sc是可串行的(serializable),当且仅当Sc冲突等价于一个串行调度。
这种可串行化通常称为冲突等价可串行化。
若一个并发执行的所有事务都遵守2PL,则这些事务的所有并发调度策略都是可串性化的。
2PL是可串行化的充分条件,不是必要条件。
所以可以满足可串行化。
2pl和乐观算法的根本不同是,2pl是悲观算法的一种锁协议算法,2pl在对任何数据进行读写之前,事务要先获得对该数据的封锁。
乐观算法,可以利用锁协议,也可以利用时间戳协议,所有用户读取数据时不锁定数据,当一个用户更新数据时,系统将进行检查,查看该用户读取数据后其他用户是否又更改了该数据。
如果其他用户更新了数据,将产生一个错误。