-
ACID 그리고 CAP개념@ 17. 1 ~ 18/DB 2017. 9. 7. 00:38
Atomicity : 분해할 수 없이 원자적이고
Consistency : 일관된 데이터를 유지하고
Isolation : 고립되어 다른 연산이 끼어들 수 없고
Durability : 데이터가 영원히 반영된 상태로 있는
ACID 트랜잭션은 관계형 데이터베이스에서 여러 개의 SQL연산을 하나의 단일 트랜잭션으로 처리하는 것을 의미한다.
여러개의 테이블에 대해서 읽고 쓰고 하는 행동을 하나의 연산처럼 사용하는 것이다.
트랜잭션에서 가장 중요한 개념은 원자성이다.
여러개의 SQL 연산이 하나의 연산처럼 동작해야 한다. 어느것 하나라도 실패했다면 모든 연산이 실행되지 않아야 한다.
일관성은 같은 시점에 접속하는 클라이언트들은 항상 같은 데이터를 보고 있어야 한다는 것
고립성은 트랜잭션이 수행되는 동안에 다른 연산이 끼어들지 못한다는 것
영속성은 트랜잭션이 완료된 이후의 데이터는 업데이트된 상태로 그대로 영원히 반영되어 있다 는 뜻
CAP정리
일관성(C)
- 데이터를 저장하는 장비가 1대든 100대든 모든 장비에는 동일한 데이터가 저장되어 있어야 한다는 것.
ACID 트랜잭션에서 의미하는 것이기도 하다. 어떤 데이터베이스의 속성에 C가 있다면 트랜잭션 기능 혹은 그와 비슷한 매커니즘이 존재한다는 뜻
가용성(A)
- 죽지 않은 상태의 모든 서버는 클라이언트에게 항상 정상 처리 응답을 보내주어야 한다는 뜻. 현재 시스템에 문제가 있어서
읽거나 쓸수 없다고 보내면 가용성이 보장되지 않는 것이다.
분단 허용성(P)
- 클러스터가 여러대 동작하고 있을 때 해당 클러스터 사이에 접속이 단절되어 서로 통신을 할 수 없는 상황에서도 시스템이 잘 동작해야한다는 뜻
관계형 데이터베이스가 동시에 다량의 서버를 운용하는 클러스터링에 적합하지 않는 이유
관계형 데이터베이스는 CA 시스템이다. 일관성과 가용성은 보장하되 분단 허용성은 보장하지 않는다.
그 이유는 10대의 서버중에서 5번 서버가 접속이 끊겼다. CA라서 P는 지원하지 않으니까 전체 시스템이 잘 동작하지 않는건 이해한다.
근데 CA를 지원하려면 연결이 끊어진 5번 서버 떄문에 나머지 서버를 중단시켜야 CA를 만족하게 된다. 근데 비효율적이고 거의 불가능하다.
결국 관계형 데이터베이스는 클러스터링으로 만들기가 어렵다.
해결책은? 간단하다 CA를 버리면 된다. 버린다는게 극단적으로 false라는 개념이 아닌 100%지원이라면 60%지원으로 변경한다는 의미다.
NoSQL은 대부분 CA가 아닌 CP나 AP시스템이다.
C가 들어간다면 하나의 쓰기 작업에 100대가 있다면 100대 모두 lock이 걸리게 된다. 응답속도가 매우 안좋음.
'@ 17. 1 ~ 18 > DB' 카테고리의 다른 글
[MySQL] 조인 (2) (0) 2018.06.28 [MySQL] 테이블 조인 (1) (0) 2018.06.26 인덱스 관련 (0) 2018.02.27 각 키 설명 (0) 2018.02.27 JOIN 관련 (0) 2018.02.26