SQL (관계형 DB)
==> 데이터를 정해진 데이터 schema에 따라 테이블에 저장
==> 데이터는 관계를 통해 여러 테이블에 분산
==>데이터는 테이블에 레코드로 저장된다. 각 테이블마다 명확하게 정의된 구조가 있다. 해당 구조는 필드의 이름과 데이터 유형으로 정의된다. ( schema를 준수하지 않은 레코드는 테이블에 추가할 수 없다.)
==> 이때 DB에 데이터 중복이 일어날 수도 있다. 이를 피하기 위해 '관계'를 이용한다.
==> 하나의 테이블에 중복이 없기에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없다.
- 장점
- 데이터 중복이 없다.
- 명확하게 정의된 스키마로 데이터를 다루기에 데이터 무결성이 보장된다.
- 단점
- 유연하지 않고, 데이터 스키마를 사전에 계획해야 한다. (나중에 수정하기 힘듦)
- 관계를 맺고 있어서 Join문이 많은 복잡한 쿼리 형태가 만들어질 수 있다.
- 대체로 수직적 확장만 가능하다.
NoSQL (비관계형 DB)
==> 레코드를 문서(documents)라고 부르며 다른 구조의 디이터를 같은 컬렉션에 추가가 가능하다.
==> 문서는 Json과 비슷한 형태로 여러 테이블에 나누어 담지 않고 관련 데이터를 동일한 '컬렉션'에 넣는다.
==> 따라서 여러 테이블에 조인할 필요없이 한 문서에서 작성이 된다.
==> Join이 필요할 때는 컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 정확하게 산출하도록 한다.
==> 이렇게 될 경우 데이터가 중복되어 서로 영향을 줄 위험이 크다. 따라서 Join을 사용하지 않으며 자주 변경되지 않는 데이터에서 사용하면 상당히 효율적이다.
- 장점
- 유연하다. 데이터 조정이 쉽고 새로운 필드 추가가 쉽다.
- 데이터는 애플리케이션이 필요로 하는 형식으로 저장된다. 데이터를 읽어오는 속도가 빠르다.
- 수직 및 수평 확장이 가능해서 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리가 가능하다.
- 단점
- 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있다.
- 데이터 중복을 계속 업데이트 해야 한다.
- 데이터가 여러 컬렉션에 중복되어 있기에 수정 시 모든 컬렉션에서 수행해야 한다.
'다양한 Dev. > 기본 정리' 카테고리의 다른 글
2023.05.20 - SQL 문 정리 (0) | 2023.05.20 |
---|---|
2023.05.15 GitHub - Fork (0) | 2023.05.15 |
2023.05.02 - 정규표현식(Regular Expression) (0) | 2023.05.02 |
2023.04.17 - Time Complexity(시간 복잡도) (0) | 2023.04.17 |
2023.04.13 - HTTP란? (0) | 2023.04.13 |