SQL
- 관계형 데이터베이스 관리 시스템
- 고정되거나 정적이거나 미리 정의된 스키마를 갖고 있다.
- 스키마를 준수하지 않은 레코드는 테이블 추가가 불가능하다.
- 테이블 형식으로 데이터를 표시하여 테이블 기반 데이터베이스로 알려져있다.
- 수직적 확장
- 데이터를 정의하고 조작하기 위한 "구조화 된 쿼리언어"
- 복잡한 쿼리에 적합하지만 계층적 데이터 저장에 대해서는 적합하지 않다.
- 각 데이터가 중복없이 저장된다.
- 예) MySQL, Oracle, PostgreSQL 등
NoSQL
- 비관계형 분산형 데이터베이스
- 동적 스키마이기 때문에 언제든지 저장된 데이터를 조정하고 새로운 필드 추가가 가능하다.
- Key-value, documents, graph
- 수평적 확장
- SQL 쿼리만큼 강력하지 않기 때문에 복잡한 쿼리에 좋지 않다.
- 비정형 쿼리 / 데이터베이스마다 다르다.
- 계층형 데이터스토리지에 적합하다.
- Join 개념이 존재하지 않는다.
- 데이터 읽는 속도가 빨라진다.
- 예) MongoDB, BigTable 등
확장
- 수직적 확장 : 단순히 데이터베이스 서버 성능 향상 (CPU 업그레이드)
- 수평적 확장 : 더 많은 서버 추가, 데이터베이스가 전체적으로 분산
SQL 데이터베이스 사용이 더 좋을 때
- 관계를 맺고 있는 데이터가 자주 변경되는 경우
- NoSQL에서는 여러 컬렉션을 모두 수정해야된다.
- 변경될 여지가 없거나 명확한 스키마가 사용자와 데이터에게 중요한 경우
NoSQL 데이터베이스 사용이 더 좋을 때
- 정확한 데이터 구조를 알 수 없거나 변경/확장 될 수 있는 경우
- 읽기를 자주하고 데이터 변경이 자주 있지 않은 경우
- 데이터베이스를 수평으로 확장해야 하는 경우(막대한 양의 데이터를 다뤄야 하는 경우)
출처
https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html
https://www.javatpoint.com/sql-vs-nosql