ACID 란?
ACID는 Transaction의 무결성을 유지하는 기본 개념으로 데이타베이스 안에서 작용한다.
정의로는, 관계형 데이터베이스 시스템에서 트랜잭션의 신뢰성과 무결성을 보장하는 일련의 속성이라고 할 수 있다.
ACID의 준수는 데이터를 휘발성으로 만들지 않으며, 항상 접근가능하고 완전한 데이터베이스를 만드는 역할을 한다.
Transaction Lifespan
트랜잭션은 시작할 때는 BEGIN으로 시작하고, COMMIT으로 disk로 저장하거나, ROLLBACK 메모리에 있는 내용을 없애기도 한다. 이러한 활동을 최적화 하기 위해서 각 DB의 설정을 변경하여 COMMIT이나 ROLLBACK에 최적화 할 수도 있다.
Atomicity
트랜잭션이 분할할 수 없는 단일 작업 단위로 취급되도록 보장한다. 트랜잭션에 의해 이루어진 모든 변경 사항이 커밋되어 데이터베이스에 적용되거나 변경 사항이 하나도 적용되지 않습니다. 트랜잭션의 일부가 실패하면 전체 트랜잭션이 롤백되고 데이터베이스는 변경되지 않은 상태로 유지됩니다.
즉 트랜잭션은 분 할 될 수 없는 것입니다. 만약에 쿼리가 실패하면 RollBack이 일어나고, 맞으면 Commit을 통해서 Disk에 저장을 합니다. 또한, 만약 BEGIN후 Commit이 일어나기전에 시스템이 Crash가 일어나면, 디스크에 쓰지 않고 다시 시작할때 롤백을(=clean up) 시작하기도 합니다.
Isolation
동시 진행 중인 트랜잭션이 서로 간섭하지 않도록 합니다. 각 트랜잭션은 마치 데이터베이스에서 실행 중인 유일한 트랜잭션인 것처럼 독립적으로 작동합니다. 격리는 더티 읽기(커밋되지 않은 데이터 읽기), 반복 불가능한 읽기(읽기 간에 일관되지 않은 데이터), 팬텀 읽기(다른 트랜잭션에서 삽입된 새 행 확인)와 같은 문제를 방지합니다.Mutilple transaction이 일어난다면 데이터를 읽을 때 여러가지 현상이 일어날 수 있다.
Dirty reads
- commit 되기전에 있는 쿼리 두개의 트랜잭션이 일어나면 한개의 쿼리에서 Quantity, Price를 불러 오고 하나의 쿼리에서 Quntity를 바꿨다고 가정한다. 그렇다면 먼저 불려진 쿼리에서 합계를 구하려고 하는데, Quantity가 바뀐 값을 곱해버리면, 원래의 Quantity와는 다르게 5x 10이아닌 10x10을 해버릴 수 있는것이다.
Phanotom reads
내가 맨처음에 테이블에서 값을 참고 했는데, 누가 그 테이블에 데이타를 넣은 것이다. 그러면 나중에 읽을때는 그 값이 애초에 없는 값을 읽었기 때문에 유령처럼 데이타가 존재하는 것이다.
이에 따라서 Isolation 레벨을 부여해서 데이터 베이스의 트랜잭션 격리 레벨을 조정할 수 있다.
Isolation Level
- Read uncommitted : 커밋에 상관없이 체인지 된 값을 다 볼 수 있는 것.
- Read committed : 커밋 된것만 볼 수 있는것.
- Repeatable Read : 트랙잭션이 러닝하고 있을때 데이타는 같은 상태로 남아있는 것
- Snapshot : 트랜잭션이 스타트 될때의 상태를 유지하고 그것만 보는 것
- Serializable : 쿼리의 순서를 정해서 하는 것 concurrency가 적용된다고 보기 어려움
- Each DBMS use different isolation level
Consistency
트랜잭션이 데이터베이스를 한 유효한 상태에서 다른 유효한 상태로 가져오도록 보장합니다. 데이터베이스는 트랜잭션 전후에 무결성 제약 조건이라고 하는 사전 정의된 규칙 또는 제약 조건 집합을 따라야 합니다. 트랜잭션이 이러한 제약 조건을 위반하면 트랜잭션이 롤백되고 데이터베이스는 변경되지 않은 상태로 유지됩니다.
지속성을 보장하는 요소이다. 다음은 지속성을 유지하는 예시 및 기본 개념이다.
Consistency in Data
- Defined by the User
- Referential integrity(foreign keys)
- isolation
- Atomicity
Consistency in reads
- update가 'abc'가되면 read도 'abc'가 되야하는 것이다
- 즉 어떤 값의 변경이 일어나면, 그 값이 지속적으로 도출되게 해야되는 것이다.
다만, Consistency는 중간에 보장 안되는 경우도 있다. 하지만 결국에는 Consistency가 보장 되게 만들 게 한다.
동기화가 Consistency를 보장할 수 있다.
Durability
트랜잭션이 커밋되면 변경 사항이 영구적으로 저장되며 정전이나 시스템 충돌과 같은 후속 장애에도 살아남을 수 있도록 보장하며, 커밋된 데이터는 내구성이 뛰어나며 시스템 장애가 발생하더라도 사용할 수 있습니다.
Changes made by committed transactions must be persisted in a durable non-volatile storage Durability techniques
- WAL(Write Ahead Log) : 모든 데이타를 저장하려면 expensive하다 그래서 WAL을 만든 것이다. 압축해서 필요한 데이타만 저장한 것이다
- Asynchronous snapshot - 비동기식 스냅
- AOF : 빠른 저장을 가능하게 하고, Crash가 있어도 빨리 복구 할 수 있게 만든다.
이러한 속성을 종합하면 데이터베이스 트랜잭션을 관리하기 위한 안정적이고 일관된 환경을 제공합니다. 이러한 특성은 장애나 동시 작업이 발생하는 경우에도 데이터가 일관된 상태로 유지되고 트랜잭션이 안정적으로 처리되도록 보장합니다. 특히 높은 수준의 데이터 무결성과 안정성이 요구되는 애플리케이션의 경우 ACID 규정 준수는 데이터베이스 시스템의 중요한 측면입니다.
#backupbackup 태그 삭제#R1R1 태그 삭제#R1SoftR1Soft 태그 삭제#RansomwareRansomware 태그 삭제#랜섬웨어랜섬웨어 태그 삭제#백업백업 태그 삭제#백업 솔루션백업 솔루션 태그 삭제#백업/복구백업/복구 태그 삭제#IperfIperf 태그 삭제#Iperf3Iperf3 태그 삭제