问题 多项选择题

试题五阅读以下说明,根据要求回答下列问题。[说明] 某连锁酒店提供网上预订房间业务,流程如下:(1)客户查询指定日期内所有类别的空余房间数,系统显示空房表(日期,房间类别,数量)中的信息。(2)客户输入预订的起始日期、结束日期、房间类别和数量,并提交。(3)系统将用户提交的信息写入预订表(身份证号,起始日期,结束日期,房间类别,数量),并修改空房表的相关数据。针对上述业务流程,回答下列问题。

引入如下伪指令:将预订过程作为一个事务,将查询和修改空房表的操作分别记为R(A)和W(A,x),插入预订表的操作记为W(B,a),其中x代表空余房间数,a代表预订房间数,则事务的伪指令序列为:x=R(A),W(A,x-a),w(B,a)。在并发操作的情况下,若客户1、客户2同时预订相同类别的房间时,可能出现的执行序列为:x1=R(A),x2=R(A),W(A,x1-a1),W(B1,a1),W(A,x2-a2),W(B2,a2)。(1)此时会出现什么问题,请用100字以内的文字简要叙述。(2)为了解决上述问题,引入共享锁指令SLock(X)和独占锁指令XLock(X)对数据X进行加锁,解锁指令Unlock(X)对数据X进行解锁,请补充上述执行序列,使其满足2PL协议,不产生死锁且持有锁的时间最短。

答案

参考答案:(A)出现问题:丢失修改,客户A预订aA数量房间后,对空房数量的修改被TB的修改覆盖,造成数据不一致。 (B)XLOCK(A),xA=R(A),W(A,xA-aA),XLOCK(B),UNLOCK(A),W(BA,aA), UNLOCK(B),XLOCK(A),xB=R(A),W(A,xB-aB),XLOCK(B),UNLOCK(A), W(BB,aB),UNLOCK(B)

解析:若对并发事务的指令交叉执行不加以控制,则会使每个事务的执行结果相互干扰,破坏事务的隔离性,从而造成数据库的不一致。本试题中,客户1预订a1数量房间后,对空房数量的修改可能被客户2的修改所覆盖,造成不能体现出客户1已预订的房间数量。该现象属于丢失修改造成的数据库不一致性。 在并发状态下,可能会相互干扰破坏事务的ACID属性,加锁机制是保障事务正确执行的一种机制。2PL协议能够保证事务在并发状态下调度的正确性,即可串行化的调度。针对题干所给出的客户f的房间预订伪指令序列:x=R(A),W(A,x-a),W(B,a),需要在修改房间数量之前加XLock()指令,并保证读/写锁不交叉,即确保客户1释放A上的锁之后客户2才能执行加锁操作。重写后的房间预订伪指令序列如下。 XLOCK(A),x1=R(A),W(A,x1-a1),XLOCK(B),UNLOCK(A),W(B1,a1),UNLOCK(B),XLOCK(A), x2=R(A),W(A,x2-a2),XLOCK(B),UNLOCK(A),W(B2,a2),UNLOCK(B)

单项选择题
单项选择题