Transaction(2)
30분이라도 정리하고 자자는 마음으로 어제 궁금했던 부분을 간략하게 정리하려고 한다.
분산 트랜잭션
2PC(Two-phase commit protocal)의 경우 분산 트랜잭션에서 많이 사용한다고 한다. 그렇다면 분산 트랜잭션이 정확히 무엇일까?
- 분산 트랜잭션: 서로 다른 서버에 데이터를 처리할 때 하나의 트랜잭션으로 처리하는 것
- 예: 서로 다른 은행간의 거래
django transaction exception
Avoid catching exceptions inside atomic!atmoic 블럭 내에서 예외처리하는 것을 피해야 한다. 이유는 블럭안에서 잡는 경우 예외처리를 해결한 줄 알고 예상한 것처럼 작동하지 않을 수도 있기 때문이다.
@transaction.atomic
def viewfunc(request):
create_parent()
# 이런식으로 처리
try:
with transaction.atomic():
generate_relationships()
except IntegrityError:
handle_exception()
add_children()
Lock
Lock 이란 무엇인가?
같은 자원을 사용하려는 다중 트랜잭션 환경에서 데이터베이스의 일관성과 무결성을 유지하기 위해 순차적으로 진행을 보장 할 수 있는 직렬화 장치
공유 Lock (Shared lock/Read Lock)
- 데이터를 read 할 때 사용
- shared lock이 동시에 여러개 적용 될 수 있음 / shared lock 하나라도 걸려있으면 exclusive lock은 걸수 없음
배타적 Lock (Exclusive lock/ Write lock)
- 데이터를 읽고 쓸때 사용하며 트랜잭션이 완료될때까지 사용
- 해당 Lock 이 해제 될때까지 접근 불가
블로킹
- 하나의 자원에 lock이 연결되어있을 때, 다른 커낵션이 읽거나 쓰기 작업을 원하게 되는 경우 다른 일을 하지 못하고 묶여 있는 것을 의미