트랜잭션(직렬성)
1. 트랜잭션은 왜 사용하는가?
응용프로그램을 이용하여 데이터를 관리(CRUD) 하기 위해 데이터베이스를 이용한다. 다중의 사용자가 실시간으로 데이터를 접근하고 공유할수 있게 해주는 시스템이다.
여기에서 트랜잭션이라는 개념이 나온다.
트랜잭션은 무엇일까? 트랜잭션은 정보의 교환이나 데이터베이스 갱신 등 연관되는 작업들에 대한 일련의 연속을 의미하며, 데이터베이스의 무결성이 보장되는 상태에서 요청된 작업을 완수하기 위한 작업의 기본단위로 정의 할 수있다.
다수의 사용자가 동시에 접근하여 데이터를 생성,수정,삭제,조회 하는 과정에서 데이터의 무결성과 신뢰성을 보장하기 위해 데이터베이스 시스템에서 제공하는 기능이라고 보면 될것이다.
2. 트랜잭션 수행방법은?
트랜잭션은 실행, 부분완료, 완료, 실패, 철회의 단계로 나뉜다.
실행은 트랜잭션이 실행을 시작했거나, 실행중인 상태이며, 부분와료는 트랜잭션이 마지막 명령을 실행한 후에 상태이다.
실패는 정상적 실행을 더이상 행할 수 없음을 발견된 후의 상태이며, 철회는 트랜잭션이 복원되어 트랜잭션 수행 이전 상태로 환원된 후의 상태이다.
마지막으로 완료는 트랜잭션이 성공적으로 완료된 상태이다. 완료의 상태가 되면 데이터의 생성, 수정, 삭제의 상태가 정상적으로 처리된 상태이다.
3. 트랜잭션 직렬성이란?
트랜잭션 직렬성이란 복수개의 트랜잭션이 동시에 병행 수행되더라도 개별 트랜잭션이 차례대로 수행되는것과 결과가 같은 데이터베이스의 일관성을 보장하는 특성이다.
트랜잭션 직렬성은 충돌 직렬성과 뷰직렬성으로 구분할 수 있다.
- 충돌 직렬성 : 두 명령어 I, J 가 동시에 항목 Q에 접근 : Ti = read(Q), Tj = read(Q) 미충돌 <= 순서가 바뀌어도 직렬성 보장, 충돌 직렬 가능 스케줄 : Ti = read(Q), Tj = write(Q) 충돌 : Ti = read(Q), Tj = read(Q) 충돌 : Ti = write(Q), Tj = write(Q) 충돌 - 뷰 직렬성 : 맹목 쓰기(blind write)시 직렬성 훼손, 스케줄(S, S')간의 순차적 실행, 뷰 직렬 가능 스케줄 |
여기서 직렬 스케줄의 개념은 스케줄에 참가하는 각 트랜잭션 T에 대해서 T에 속한 모든 연산들이 다른 트랜잭션의 연산들과 인터리빙되지 않고 연속적으로 실행될 때 직렬 스케줄이라고 한다.
수식으로 표현하면 아래와 같다.
수식 표시 : 뷰 직렬 스케줄 ⊇ 충돌 직렬 스케줄 |
충돌직렬 가능 스케줄은 하나의 자원에 대해 동시에 수행하는 여러 개 트랜잭션의 순서를 바꾸어도 결과값이 변경되지 않는 상태이며,
뷰 직렬 가능 스케줄은 인터리빙하게 수행되는 스케줄 S와 순차적으로 수행되는 스케줄 S'를 비교해서 동일한 데이터 Q를 '초기 읽기', '쓰기/읽기', '마지막 쓰기' 순서만 같다면 뷰직렬 가능 스케줄이다.
데이터베이스는 ACID(원자성, 일관성, 고립성, 지속성)특성이 있으며 이 개념을 명확히 해야 한다.
관련 내용은 다음에 다시 이어서 작성하자.
'IT지식 > 데이터베이스' 카테고리의 다른 글
DBMS(Database Management System) (0) | 2023.09.05 |
---|---|
클라우드 보안 인증제 (0) | 2023.04.06 |
개념적 모델링 (0) | 2023.04.05 |