관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어
➡️ 데이터 저장, 수정, 삭제, 검색 가능
데이터는 정해진 데이터 스키마에 따라 테이블에 저장
➡️ 스키마를 준수하지 않은 레코드는 테이블에 추가 불가능
데이터는 관계를 통해 여러 테이블에 분산
➡️ 데이터의 중복을 피하기 위해 '관계' 이용
관계형 데이터베이스를 뺀 나머지 유형
스키마X, 관계X
레코드를 문서(documents)라고 부름
➡️ 문서는 Json과 비슷한 형태로 관련 데이터를 동일한 컬렉션에 넣음
다른 구조의 데이터를 같은 컬렉션에 추가 가능
여러 테이블을 조인할 필요없이 이미 필요한 모든 것을 갖춘 문서를 작성하는 것
조인을 잘 사용하지 않고 자주 변경되지 않는 데이터일 때 사용하면 효율적
스키마가 없기 때문에 유연해서 언제든 저장된 데이터를 조정하고 새로운 필드 추가 가능
데이터는 애플리케이션이 필요로 하는 형식으로 저장되기 때문에 데이터 읽는 속도 빠름
수직 및 수평 확장이 가능해 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리 가능
유연성으로 인해 데이터 구조 결정을 미루게 될 수 있음
데이터 중복을 계속 업데이트 해야함
데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수정해야 함
➡️ SQL의 경우 중복 데이터가 없기 때문에 한 번만 수정하면 됨
➕ 확장(Scaling)
SQL
데이터를 테이블에 저장하고 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 저장해야함
NoSQL
key-value, document, wide-column, graph 등의 방식으로 저장
SQL
고정된 형식의 스키마가 필요하고 수정이 어려움
NoSQL
관계형 데이터베이스보다 동적으로 스키마의 형태를 관리할 수 있음
SQL
테이블의 형식과 테이블간의 관계에 맞춰 데이터를 요청해야 함
NoSQL
데이터 그룹 자체를 조회하는 것에 초점을 두고 있어서 구조화되지 않은 쿼리 언어로도 데이터 요청 가능
SQL
일반적으로 수직적 확장만 가능
NoSQL
일반적으로 수평적으로 확장
[참고 자료]