일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- ACID
- priorityqueue
- MVC
- 시뮬레이션
- greedy
- 백준
- Spring
- BFS
- EventScheduler
- boto3
- namenode
- S3
- 우선순위큐
- JPA
- Algorithm
- Parquet
- wrapper class
- MySQL
- hdfs
- datanode
- BIT연산
- database
- 프로그래머스
- 구현
- spark
- Transaction
- SQL
- ES6
- procedure
- bigdata
- Today
- Total
IT 개발일지
[Database] 1. ACID - Transaction 본문
Transaction
- Database에서 Transaction이란 정보의 교환이나 데이터베이스 갱신 등과 연관되는 작업에 대한 일련의 연산
- 쪼갤 수 없는 업무 처리의 최소 단위
- 하나의 쿼리가 아닌 쿼리들의 모음(Collection of Queries) 또한 Transaction이 될 수 있다.
=> 하나의 쿼리에서는 모든 로직의 달성이 어렵기 때문이다.
예를 들면, 계좌 송금을 하는 Transaction이 있다. 해당 Transaction은
1. 송신인의 계좌에 돈이 얼마나 있는지 조회(SELECT)
2. 송신인의 계좌에서 돈 차감(UPDATE)
3. 수신인의 계좌에서 돈 추가(UPDATE)
이렇게 3개의 쿼리가 하나의 송금 Transaction이 될 수 있다.
Transaction의 Lifespan
1. Transaction BEGIN
- DB에 Transaction이 시작하였다는 것을 명시
- Oracle, DB2에는 Transaction을 시작하는 명령어 따로 없음
-- SQL Server, PostgresSQL
BEGIN TRANSACTION
-- MySQL
START TRANSACTION
-- SQLite
BEGIN
2. Transaction COMMIT
- Tranaction을 진행하기 위한 쿼리들이 수행되었다면, Consistency(지속성)을 위해서 해당 transaction을 commit하여 데이터베이스에 반영한다.
- 처리 과정을 데이터베이스에 영구 저장
- Commit을 하는 기준은 다름
1. 100개의 Query를 진행할 때 마다 100번 Commit
2. 100개의 Query 모두 진행한 후에 Commit(일반적으로 너무 Query가 길면 권장하지 않음)
3. Transaction ROLLBACK
- 모든 변경 사항을 일괄적으로 취소 => 마지막 Commit 완료 시점까지 되돌아 감
- 만약에 Transaction이 예기치 못하게 종료되면, DB를 다시 시작할 때, 해당 Transaction이전까지 rollback
- 트랜잭션의 일부가 정상적으로 처리되더라도, 해당 연산 포함 모든 연산을 아예 취소
- DBMS마다 최적화하는 법 다름(Postgres는 commit이 빠른 것으로 알려져 있음)
Transaction의 특성
1. Transaction을 일반적으로 데이터를 변경, 수정할 때 사용함
2. 그러나, Read-Only transaction을 진행할 때에도 진행
- 예를 들어 보고서를 작성해야 할 때, 특정 tranaction의 시간에 기반한 consistent한 snapshot이 필요할 때가 있다.
- Isolation 부분 참고