SQL vs NOSQL
SQL
- SQL을 사용하면 RDBMS에서 데이터 저장, 수정, 삭제 및 검색 가능
- RDBMS에서 핵심적인 특징
1) 데이터는 정해진 데이터 스키마에 따라 테이블에 저장
2) 데이터는 관계를 통해 여러 테이블에 분산
- 스키마에 준수하지 않은 데이터는 저장 불가
- 데이터 중복 피하기 위해 관계 이용 (Join에서 다뤘던 내용 참고)
장점
- 명확히 정의된 스키마, Integrity 보장
- 관계는 각 데이터를 중복 없이 한번만 저장
단점
- 유연성이 떨어짐 (조인 특성의 이유)
- 관계를 맺고 있어 조인이 많을 수록 복잡
- 수직적 확장만 가능
SQL 총총
- 관계를 맺고 있는 데이터가 자주 변경되는 어플의 경우 괜찮음
--> NoSQL은 다수 컬렉션을 모두 수정
- 변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우
- 대표적 MySQL, Oracle, SQLite, PostgressSQL, MariaDB
NoSQL
- RDBMS의 반대 (스키마도 없고 관계도 없음)
- NoSQL에선 레코드를 문서라 부름
- SQL과 또 하나 차이점은 다른 구조의 데이터를 같은 컬렉션에 삽입
- 여러 테이블 조인할 필요가 없고 모든 것을 갖춘 문서
- 조인을 잘 사용하지 않고 자주 변경되지 않는 데이터 일 때 NoSQL쓰면 상당히 효율적
장점
- 스키마가 없어서 유연함
- 데이터 읽는 속도가 빠름
- 수직 및 수평 확장이 가능해서 어플리케이션 발생시키는 모든 읽기 및 쓰기 요청처리 가능
단점
- 유연성으로 인해 데이터 구조 결정하는데 시간이 좀 걸림
- 데이터 중복을 계속 업데이트
- 수정 시 모든 컬렉션에서 수행
NoSQL 총총
- 정확한 데이터 구조 모르거나 변경/확장 될 수 있는 경우
- 읽기 자주 하지만 변경은 별로 없는 경우
- DB 수평적 확장해야 하는 경우
- 대표적 MongoDB, Casandra
번외 개념
👉 DB 서버 확장성은 수직적, 수평적 확장으로 이뤄짐
수직적 확장
- 단순히 DB서버 성능 향상 (ex CPU 업그레이드)
- 데이터 저장 방식으로 인해 SQL DB는 수직적 확장만 지원
수평적 확장
- 더 많은 서버 추가, DB가 전체적으로 분산 (ex 여러 호스트에서 작동)
- 수평적 확장은 NoSQL에서만 가능