SQL (관계형 데이터베이스)
특징
- 정해진 데이터 스키마: 데이터는 미리 정의된 스키마에 따라 테이블에 저장됨
- 테이블 간의 관계: 데이터는 여러 테이블에 분산되며, 테이블 간의 관계를 통해 데이터 중복을 방지함
데이터 저장
- 레코드: 테이블에 저장된 각 행을 의미함
- 구조: 각 테이블은 명확하게 정의된 구조를 가지며, 필드의 이름과 데이터 유형으로 정의됨
- 스키마 준수: 스키마를 따르지 않는 레코드는 테이블에 추가할 수 없음
장점
- 데이터 무결성 보장: 명확하게 정의된 스키마 덕분에 데이터 무결성이 보장됨
- 중복 방지: 관계를 통해 각 데이터를 중복 없이 한 번만 저장할 수 있음
단점
- 덜 유연함: 데이터 스키마를 사전에 계획하고 정의해야 함. 나중에 스키마를 수정하는 것이 어려움
- 복잡한 쿼리: 관계를 맺고 있어서 JOIN 문이 많은 복잡한 쿼리가 생성될 수 있음
- 확장성 제한: 일반적으로 수직적 확장(서버 성능 향상)만 가능함
확장성 개념 및 사용이 적합한 경우
- SQL: 일반적으로 수직적 확장만 지원함
- 적합한 경우: 관계가 맺어진 데이터가 자주 변경되고 명확한 스키마가 중요한 경우
NoSQL (비관계형 데이터베이스)
특징
- 스키마 없음: 사전에 정의된 스키마가 없으며, 유연한 데이터 구조를 가짐
- 테이블 간의 관계 없음: 관계형 데이터베이스와 달리 테이블 간의 관계를 사용하지 않음
데이터 저장
- 문서: 레코드를 문서(documents)라고 부르며, JSON과 비슷한 형태로 저장됨
- 컬렉션: 관련 데이터를 동일한 컬렉션에 저장하여, 여러 테이블로 나누지 않음
장점
- 유연성: 스키마가 없어서 저장된 데이터를 언제든지 조정하고 새로운 필드를 추가할 수 있음
- 빠른 읽기 속도: 데이터는 애플리케이션이 필요로 하는 형식으로 저장되므로 읽어오는 속도가 빨라짐
- 수평적 확장 가능: 수평적 확장(서버 추가를 통한 데이터베이스 분산)이 가능하여 막대한 양의 데이터를 처리할 수 있음
단점
- 유연성의 단점: 데이터 구조 결정을 미루게 되어 혼란을 초래할 수 있음
- 데이터 중복: 데이터를 여러 컬렉션에 중복 저장해야 하므로, 데이터 수정 시 모든 컬렉션에서 수정해야 함
확장성 개념 및 사용이 적합한 경우
- NoSQL: 수평적 확장도 지원함
- 적합한 경우: 데이터 구조가 불명확하거나 변경/확장될 가능성이 있고, 데이터 읽기가 빈번하며 수평적 확장이 필요한 경우
출처: https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Database/SQL%EA%B3%BC%20NOSQL%EC%9D%98%20%EC%B0%A8%EC%9D%B4.md#sql-%EA%B4%80%EA%B3%84%ED%98%95-db