[Database] νΈλμμ κ³Ό ACID
νΈλμμ
νΈλμμ μ΄λ DBMSκ° λ°μ΄ν°λ² μ΄μ€λ₯Ό λ€λ£° λ μ¬μ©νλ μμ (νλ‘κ·Έλ¨)μ λ¨μμ΄λ€.
λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°λ₯Ό λ€λ£° λ μ₯μ κ° μΌμ΄λλ κ²½μ°κ° μλλ°, μ΄λ λ°μ΄ν°λ₯Ό 볡ꡬνλ μμ μ λ¨μκ° λλ€. λ, μ¬λ¬ μμ μ΄ νλ²μ κ°μ λ°μ΄ν°λ₯Ό μ‘°μν΄μ λ¬Έμ κ° μκΈΈ λκ° μλλ°, μ΄ μμ λ€μ μλ‘ λΆλ¦¬ν΄μ£Όλ λ¨μκ° λλ€.
νΈλμμ μ μ μ²΄κ° μνλκ±°λ λλ μ ν μνλμ§ μμμΌ νλ€.
μλ₯Ό λ€μ΄, Aκ° Bμκ² 10000μμ μ΄μ²΄νλ κ²½μ°λ λ€μκ³Ό κ°μ΄ λμνλ€.
START TRANSACTION
1. Aμμ 10000μμ μΈμΆνλ SQL UPDATEλ¬Έ
2. Bμμ 10000μμ μ
κΈνλ SQL UPDATEλ¬Έ
COMMIT
μ΄λ, COMMITμ νΈλμμ μ μ’ λ£λ₯Ό μ리λ SQLλ¬Έμ΄λ€.
μ μν©μ λ μμΈν κΈ°λ‘νλ©΄ λ€μκ³Ό κ°λ€.
START TRANSACTION
1. Aμ κ³μ’ μμ‘μ μ½μ΄μ¨λ€
2. Bμ κ³μ’ μμ‘μ μ½μ΄μ¨λ€
3. Aμ κ³μ’μμ 10000μμ λΉΌλ SQL UPDATEλ¬Έ
4. Bμ κ³μ’μμ 10000μμ λνλ SQL UPDATEλ¬Έ
COMMIT //λΆλΆ μλ£
5. A κ³μ’ μμ‘μ λ°μ΄ν°λ² μ΄μ€μ κΈ°λ‘
6. B κ³μ’ μμ‘μ λ°μ΄ν°λ² μ΄μ€μ κΈ°λ‘
DBMSκ° λμμ λ§μ νΈλμμ μ μνν λ, κ°κ°μ νΈλμμ μ΄ νλλμ€ν¬μ κ°λ³ μ κ·Όνλ κ²μ νΌνκ³ , μ¬μ©μμκ² λμ± λΉ λ₯΄κ² μλ΅νκΈ° μν΄μ μμ κ°μ΄ commitμΌλ‘ μμλ‘ μ’ λ₯λ₯Ό μ μΈν ν, 5,6λ²μ΄ μ§νλμ΄ λ°μ΄ν°λ² μ΄μ€μ κΈ°λ‘μ μννλ€.
νΈλμμ μν κ³Όμ
μμ -> μν (1~4) -> λΆλΆμλ£ (COMMIT) -> λ²νΌ λ΄μ© κΈ°λ‘ (5~6) -> μλ£
νΈλμμ μ μ±μ§ ACID
Atomicity μμμ±
νΈλμμ μ ν¬ν¨λ μμ μ μμμ²λΌ λ μ΄μ μͺΌκ°μ§μ§ μλ νλμ νλ‘κ·Έλ¨ λ¨μλ‘ λμν΄μΌ νλ€. μ¦, νΈλμμ μ ν¬ν¨λ μμ μ μ λΆ μνλκ±°λ, μ λΆ μνλμ§ μμμΌ νλ€.
μ΄λ₯Ό μ§ν€κΈ° μν΄μ SQLμμλ νΈλμμ μ μμ (START TRANSATCTION) κ³Ό λ (COMMIT) μ νκΈ°νκ³ , μ₯μ κ° μκ²Όμ λ ν볡 μκ³ λ¦¬μ¦μ ν΅ν΄ λ΄μ©μ μ·¨μ (ROLLBACK)νκ³ νΉμ μ§μ μ μ μ₯ν΄ νΈλμμ μ€κ° μ§μ μ μμ λ΄μ©μ λ°μνλ ν¬μΈνΈλ₯Ό λ§λ€κΈ°λ νλ€. (SAVE)
νμ€ λͺ λ Ήμ΄ | λ¬Έλ² | μ€λͺ |
START TRANSACTION | SET TRANSACTION | νΈλμμ μ μμ |
COMMIT | COMMIT | νΈλμμ μ μ’ λ£ |
ROLLBACK | ROLLBACK TO <savepoint> | νΈλμμ μ μ 체 νΉμ <savepoint>κΉμ§ 무ν¨νμν΄ |
SAVE | SAVEPOINT <identifier> | <savepoint>λ₯Ό λ§λ¦ |
DBMSλ μμμ±μ μ μ§νκΈ° μν΄ ν볡(볡ꡬ) κ΄λ¦¬μ νλ‘κ·Έλ¨μ μλμν¨λ€.
Consistency μΌκ΄μ±
νΈλμμ μ μννκΈ° μ μ΄λ μνν νλ λ°μ΄ν°λ² μ΄μ€λ νμ μΌκ΄λ μνλ₯Ό μ μ§ν΄μΌ νλ€.
Aκ³μ’ + B κ³μ’ = 20λ§μ => νΈλμμ μν => Aκ³μ’ + B κ³μ’ = 20λ§μ
DBMSλ μΌκ΄μ±μ μ μ§νλλ‘ λμμ± μκ³ λ¦¬μ¦μ μ¬μ©νλ€.
Isolation κ³ λ¦½μ±
μν μ€μΈ νΈλμμ μ λ€λ₯Έ νΈλμμ μ΄ λΌμ΄λ€μ΄ λ³κ²½ μ€μΈ λ°μ΄ν° κ°μ νΌμνλ μΌμ μμ΄μΌ νλ€.
λμμ μνλλ νΈλμμ μ΄ κ°μ λ°μ΄ν°λ₯Ό κ°μ§κ³ μΆ©λνμ§ μλλ‘ μ μ΄νλ μμ μ΄ λμμ± μ μ΄(concurrency control)μ΄λ€. λ, λμμ± μ μ΄λ³΄λ€ μνλ λ°©λ²μΌλ‘ νΈλμμ κ³ λ¦½ μμ€μ μ€μ νμ¬ νΈλμμ μ μνΈ κ°μμ μνμν€λ λ°©λ²λ μλ€.
Durability μ§μμ±
μνμ μ±κ³΅μ μΌλ‘ μλ£ν νΈλμμ μ λ³κ²½ν λ°μ΄ν°λ₯Ό μꡬν μ μ₯ν΄μΌ νλ€.
DBMSλ μ§μμ±μ μν΄ λ³΅κ΅¬ μμ€ν μ μ¬μ©νλλ°, λ‘κ·Έ νμΌμ λ¨κ²¨μ 볡ꡬ μμ μ μννλ λ±μ μμ μ νλ€.