본문 바로가기
컴퓨터공학/데이터베이스(database)

[Transaction] View Seiralizability

by 바코94 2020. 5. 30.

View equivalent: 스케줄 S, S'이 있을 때 세 가지 조건을 만족하면 view equivalent하다고 한다.

세 조건 다 모든 아이템에 대하여 체크해야 한다. 데이터 중 하나를 Q라고 가정한다. 이 때, 읽기와 쓰기에 대해서만 얘기한다.

 

1.  S에서 T1가 Q를 initial read 했다면 S'의 T1에서도 Q를 initial read해야한다. initial read란 스케줄에서 데이터를 시간상 처음 read 했을 때를 얘기한다. 

2. S에서 Tj가 wirte(Q) 하고 나서 Ti가 read(Q)했다고 하자. 그러면 S'에서도 Tj가 Write(Q)하고 Ti가 Read(Q) 해야 한다.  항상 이 순서를 지키는 것이 조건 2이다.

3.  S의 Ti에서 마지막 명령으로 write(Q)를 했다면 S'의 Ti에서도 마지막에 write(Q)를 해야한다. 

 

S'이 serial schedule이고 S'과 위의 조건 세개를 만족 스케줄이라면 그 스케줄은 View Serializable한 스케줄이다.

정리하면, S의 Ti에서 읽은 초기값과 S'의 Ti에서 읽은 초기값과 같아야 되고 스케줄의 마지막 연산으로 write(Q)를 하는 것이 동일해야 하고 Q를 write하고 read하는 순서가 일치해야 한다는 것이다. 

 

S

S'은 T5->T6->T7이라고 해보자.

 

조건 1. S의 T5에서 초기값 Q를 읽었고 S'에서도 동일하게 읽는다.

조건 2. Write하고 난 후 Read하는 것이 없으므로 통과

조건 3. S에서 마지막 연산으로 T7이 Write(Q)를 하는데 S'도 동일하게 T7에서 Write(Q)를 하고 끝난다.

 

S와 S'은 View equivalent하다. S'이 serial schedule이기 때문에 S는 view-serializable하다.

그렇다면 conflict serializable 일까?

S에서 T5와 T6의 Write(Q)끼리 순서를 바꿔야하는데 충돌 연산이기때문에 바꿀 수 없다. 

 

S'을 T6->T5->T7으로 만들면 해결될까? S의 T5 Read(Q)와 T6  Write(Q)이 충돌연산 이기 때문에 바꿀 수 없다.

다른 것을 다 해보아도 conflict serializable하지 않다. 

 

이런 상황(View Serializable & not conflict serializable )이 가지는 특징은 T6, T7이 read없이 write를 하는 것이다.(blind write)

 

 +, -인 연산으로만 구성이 되어 있을때 non-conflict serializable, not view serializable 하여도 serializable한 경우도 있다. 하지만, 실제 상황에서는 연산들을 미리 다 확인하여 판단할 수 없기 때문에 +,- 을 사용할 떄 serializable을 판단하지 못한다. 따라서, 앞서 설명한 조건들을 사용하여 제한적으로 판단한다.

 

 

참고 사이트

https://www.gatevidyalay.com/view-serializability-in-dbms/

https://beginnersbook.com/2018/12/dbms-view-serializability/

'컴퓨터공학 > 데이터베이스(database)' 카테고리의 다른 글

[Transaction] Recoverability  (0) 2020.05.30
[Transaction] easy test Serializability  (0) 2020.05.30
쿼리 처리 순서  (0) 2019.10.19
CREATE QUERY  (0) 2019.10.10
INSERT_QUERY  (0) 2019.10.10