NoSQL
NoSQL: 주로 Not Only SQL로 해석됨 => 기존 관계형 DBMS의 특성 뿐만 아니라 다른 특성을 부가적으로 지원한다
특성
- 관계형 모델을 사용하지 않음
- 기존의 관계형 데이터베이스보다 더 융통성 있는 데이터 모델 사용
- Schema-less: 속성의 다양성, 동적 정의
- 비정형 데이터를 저장하고 처리하는데 용이함
- 데이터의 저장 및 검색에 특화된 메커니즘 제공
- 유연성: 스키마 선언 없이 필드의 추가 및 삭제가 자유로운 스키마-less 구조
- 확장성: 스케일 아웃에 의한 서버 확장이 용이
- 고성능: 대용량 데이터 처리 성능
- 가용성: 여러 대의 백업 서버 구성으로 장애 발생 시에도 무중단 서스 가능
종류
Key-Value DB
- Key와 Value의 쌍으로 데이터가 저장됨
- Key 값은 고유해야 함
- Key-Value의 간단한 구조라서 주로 단순 스칼라 값을 저장함
- 리스트/JSON도 가능하긴 함
(예) DynamoDB
Document DB
- 컬렉션 데이터 모델 구조
- 값을 저장하기 전에 스키마를 별도 정의하지 않음
- 문서를 저장하면 그게 바로 스키마가 됨
- 각 문서별로 다른 필드를 가질 수 있음
(예) Mongodb
NoSQL의 장점
- 스키마가 없어서 데이터 조정 및 새로운 필드 추가가 용이함
- 관계형 데이터베이스는 새로운 필드를 추가할 때마다 기존 데이터베이스를 전체 드랍해야 했던 경우가 다수
- 수평적 확장
- 데이터베이스가 애플리케이션에서 발생시키는 모든 읽기/쓰기 요청 처리 가능
- 문서 쿼리 또는 키로 검색하는 것과 같은 특정 데이터 접근 패턴에 최적화된 데이터베이스 구조
NoSQL의 단점
- 모델 등이 자유로운 만큼 DBMS 단에서 제공하는 검증기능은 거의 없다고 봐도 무방하기 때문에 어플리케이션 단에서 검증을 철저히 해야 함
- UPDATE이 느림
- 데이터 중복 발생
MongoDB
- 확장성 용이
- 스피링부트에서
springboot-starter-data-mongo
dependency를 통해 사용도 쉬움
참고: