SQL
- 정해진 규격
- join(시스템이 커질 경우 join문이 많은 복잡한 쿼리가 탄생)
- 트랜잭션 사용
- 분산처리 어려움
- ACID(Atomicity(원자성), Consistency(일관성), 독립성(Isolation), 지속성(Durability))
nosql
- 스키마가 없어 정해진 규격 없음(자유로운 데이터 구조, 언제든 저장된 데이터를 조정하고 새로운 필드 추가 가능)
- join 불가능(하나의 데이터 테이블사용)
- 트랜잭션 x
- 분산처리 쉬움
- 일관성을 포기(데이터 분산을 위해)
- 데이터 중복이 발생
- update가 많이 이루어지지 않는 시스템에 좋음(자주 변경되지 않는 데이터)
ACID
- 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질
- 원자성(Atomicity)
- 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것.
- All Or Nothing의 개념으로 작업 단위를 일부분만 실행하지 않는다는 것
- 성질보존하기 : 트랜잭션 이전상태를 임시저장하여 오류 발생시 rollback 처리
- 일관성(Consistency)
- 트랜잭션이 성공적으로 완료되면 일관적인 DB상태를 유지하는 것을 말함.
- 트랜잭션 도중 데이터 타입이 바뀌면 안되고 일관성을 지켜야 한다.
- 성질보존하기 : 트랜잭션 수행 전, 후에 데이터 모델의 모든 제약 조건(기본키, 외래키, 도메인, 도메인 제약조건 등)을 체크
- 성질보존하기 : 트리거(어떤 이벤트와 조건이 발생했을대 DBMS가 자동적으로 수행할 동작을 명시)
- 격리성(Isolation)
- 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장.
- 트랜잭션끼리는 서로를 간섭할 수 없다.
- 성질보존하기 : 세마포어(lock & excute unlock) -> 데드락조심
- 세마포어 개선 : 2Pl 프로토콜 -> 여러 트랜잭션이 공유하고 있는 데이터에 동시에 접근할 수 없도록 하기 위한 목적(lock단계와 unlock 단계를 구분)
- 지속성(Durability)
- 성공적으로 수행된 트랜잭션은 영원히 반영이 되야함.
- commit을 하면 현재 상태는 영원히 보장.
- 지속성 보장하기 : Recovery
InnoDB 엔진
- RDB에서 일반적으로 잠금 스케줄러를 사용해줌.
스키마(Schema)
- DB의 구조와 제약조건에 관해 전반적인 명세를 기술한 것.
- 개체의 특성을 나타내는 속성(Attribute)
- 속성들의 집합으로 이루어진 개체(Entity)
- 개체 사이에 존재하는 관계(Relation)에 대한 정의
- 이들을 유지해야 할 제약조건
제약조건
- NOT NULL : NULL값 입력 금지
- UNIQUE : 중복값 입력 금지 (NULL값은 중복입력 가능.)
- PRIMARY KEY : 다른 테이블의 컬럼을 조회해서 무결성 검사
- CHECK : 조건으로 설정된 값만 입력 허용