1. SQL (관계형 DB)
- 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
- 데이터는 관계를 통해 여러 테이블에 분산된다.
- 즉, 스키마를 준수하지 않은 데이터는 테이블에 추가될 수 없다.
- 하나의 테이블에서 중복없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없다.
장점
- 명확하게 정의된 스키마
- 데이터 무결성 보장
- 각 데이터가 중복없이 한번만 저장된다
단점
- 덜 유연하다. 스키마를 사전에 계획하고 알려야 한다. (추후 수정 어려움)
- 관계를 맺고 있어서 복잡한 쿼리가 만들어질 수 있다.
- 수직적 확장만 가능하다.
→ 관계를 맺고 있는 데이터가 자주 변경될 경우
변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우
2. NoSQL (비관계형 DB)
- 스키마도 없고, 관계도 없다.
- 레코드를 '문서(document)'라고 부른다.
- JSON과 비슷한 형태로 저장된다.
- '조인'이라는 개념이 존재하지 않는다.
- 조인을 하고 싶다면, 컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 산출한다.
장점
- 스키마가 없어서 유연하다.
- 데이터는 어플리케이션이 필요로 하는 형식으로 저장된다. 데이터 읽어오는 속도가 빨라진다.
- 수직/수평 확장이 가능해서 어플리케이션이 발생시키는 모든 읽기/쓰기 요청을 처리 가능하다.
단점
- 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있다.
- 데이터 중복을 계속 업데이트 해야 한다.
- 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 한다.
→ 정확한 데이터 구조를 알 수 없거나 변경/확장될 수 있는 경우
읽기를 자주 하지만 데이터 변경은 자주 없는 경우
데이터베이스를 수평으로 확장해야 하는 경우(막대한 양의 데이터를 다뤄야 하는 경우)
수평적 확장은 NoSQL에서만 가능하다.
SQL은 수직적 확장만 지원한다.
'CS > 데이터베이스' 카테고리의 다른 글
DB 정규화 (0) | 2021.09.29 |
---|---|
이상(Anomaly) (0) | 2021.09.29 |
트랜잭션의 격리수준 (0) | 2021.09.28 |
Injection (0) | 2021.09.28 |
수직적 확장과 수평적 분할 (0) | 2021.09.28 |