SQL
- 장점/특징
- 명확하게 정의된 스키마 (필드 이름과 데이터 유형. 구조에 맞는 레코드만 추가)
- 데이터 무결성 보장 (정확성, 일관성)
- 데이터 중복 피하기 위해 관계 이용
- 대체로 수직적 확장 지원
- 수평적 확장(데이터베이스 서버 성능 향상 (ex.CPU 업그레이드)
- 수직적 확장(더 많은 서버 추가. 데이터베이스가 전체적으로 분산(하나의 데이터베이스에서 작동하나 여러 호스트에서 동작
- 단점
- 덜 유연함. 데이터 스키마를 사전에 계획하고 알려야 함
- 관계를 맺고 있어 조인문이 많은 복잡한 쿼리가 만들어질 수 있음
- 사용하면 좋은 경우
- 관계 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우 (nosql의 경우 해당 데이터가 있는 모든 컬렉션 수정해야해 비효율적)
- 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에 중요한 경우
NoSQL
- 장점/특징
- 스키마도, 관계 없음 -> 언제든 저장된 데이터 조정/추가 가능. 유연함
- 조인 개념이 없고 필요한 모든 것을 같은 문서를 작성
- 조인이 필요할 땐? : 컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 정확하게 산출하도록. 이 경우 데이터가 중복되어 영향을 줄 수 있으므로 조인을 잘 사용하지 않고 자주 변경되지 않는 데이터일 때 nosql쓰면 효과적
- 다른 구조의 데이터를 같은 컬렉션에 추가 가능
- 수직 및 수평적 확장 지원
- 단점
- 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있음
- 데이터 중복을 계속 업데이트 해야함
- 데이터가 여러 컬렉션에 중복되어 있어 수정 시 모든 컬렉션에서 수행해야
- 사용하면 좋은 경우
- 정확한 데이터 구조를 알 수 없거나 변경/확장 될 수 있는 경우
- 읽기를 자주 하나 변경은 자주 없는 경우
- 데이터베이스를 수평으로 확장해야 하는 경우 (데이터 양이 많은 경우)
**sql을 선택해 복잡한 JOIN문을 만들지 않도록 설계해 단점 없앨 수도 있고,
Nosql 선택해 중복 데이터를 줄이는 방법으로 설계해 단점 없앨 수도 있음
*reference
'Tech > Worklog' 카테고리의 다른 글
[JPA] insert 시 DB Default 값 적용 (@ DynamicInsert, @ ColumnDefault) (0) | 2022.07.17 |
---|---|
Spring boot h2 연동 (0) | 2021.09.14 |
ORM / Spring Data JPA (0) | 2021.08.05 |