Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
Tags
- SQL
- 백준
- S3
- database
- Spring
- ES6
- MySQL
- boto3
- JPA
- procedure
- greedy
- priorityqueue
- 우선순위큐
- namenode
- Parquet
- BIT연산
- BFS
- datanode
- MVC
- hdfs
- wrapper class
- 구현
- Transaction
- 시뮬레이션
- Algorithm
- bigdata
- EventScheduler
- spark
- 프로그래머스
- ACID
Archives
- Today
- Total
IT 개발일지
[Database] 1. ACID - Atomicity 본문
Atomicity(원자성)
- 더이상 쪼개질 수 없다는 특성이라는 의미를 함축 => 트랜잭션이 여러가지 쿼리가 하나의 작업으로 묶여있기 때문에 해당 트랜잭션을 더이상 쪼갤 수 없음.
- Transaction의 모든 쿼리는 성공해야 함
- 만약, 트랜잭션 도중 한 Query가 실패하면, 이전에 트랜잭션 내에서 성공적으로 실행되었던 모든 쿼리들은 ROLLBACK되어야 한다.
- 만약 데이터베이스가 다운되었다면, 이전에 트랜잭션 내에서 성공적으로 실행되었던 모든 쿼리들은 ROLLBACK되어야 한다.
예시
- 해당 SQL구문은 Account A에서 Account B로 100$를 송금할 때의 상황을 가정한 것이다.
* 초기
account_id | balance |
1 | $1000 |
2 | $500 |
-- MySQL 예시
START TRANSACTION;
SELECT balance FROM accounts WHERE id = 1;
UPDATE accounts set balance = balance - 100 WHERE id = 1;
-- Crash 발생--
* Crash 이후
account_id | balance |
1 | $900 |
2 | $500 |
- A에서 100달러를 차감한 Query까지는 성공하였지만, B에서 100달러를 추가해야 하는 쿼리를 수행하기 직전, 모종의 이유로 데이터베이스 down
- 해당 경우를 방지하기 위해, 마지막 Commit 상태였던 A : $1000, B: $500 인 상태로 ROLLBACK해줘야 한다.
Transaction 처리 방식
1. 트랜잭션 중 Disk에 기록
1. Query 느림(I/O작업)
2. Commit 빠름
3. Rollback 느림(디스크에 저장된 값을 Rollback해야 하므로)
예시 DBMS: Oracle, PostgreSQL, MySQL (InnoDB 엔진의 경우)
2. 트랜잭션 중 Memory에 기록
1. Query가 빠름
2. Commit 느림(Disk에 flush하는 과정)
3. Rollback 빠름