티스토리 뷰
SQL vs NoSQL
둘의 차이를 비교해보자
비교
SQL | NoSQL |
규칙에 맞는 데이터 입력 | 자유로운 데이터 입력 |
테이블간 JOIN 지원 | 컬렉션간 JOIN 미지원 |
트랜잭션 지원 | 트랜잭션 미지원 |
안전성, 일관성 | 확장성, 가용성 |
용어: 테이블, 로우, 칼럼 | 용어: 컬렉션, 도큐먼트, 필드 |
* 트랜잭션의 경우 몽고DB v3에는 지원하지 않으나 v4부터는 지원할 것이라고 한다
NoSQL 등장배경
- 지난 20년, 트랜잭션을 통한 안정적 데이터 관리가 가능한 RDB가 대세였다
- WEB2.0 + 빅데이터의 등장 => 데이터 처리 비용증가로 위기가 왔다
- 데이터 트래픽 증가 -> 1대에서 실행되는 것으로 설계된 RDB에서는 큰 비용으로 다가옴
- 스캐일 아웃이아닌 스캐일 업을 해야 하기에 OMG!
- NoSQL은 일관성을 어느정도 포기한 대신 데이터의 분산저장을 목표로 등장하였다
설명
- RDB의 장점은 뭐니뭐니해도 트랜잭션과 관계성을 통한 데이터의 일관성보장
- 이를 트레이드 오프하여 확장성을 얻은 것이 NoSQL
- 다수가 동시에 읽고 쓰는 상황에서의 성능향상
- 분산 환경에서 노드 들이 잘 작동하나 시스템의 일부가 장애시 데이터베이스가 사용 불가능한 문제를 해결
- RDB가 클러스터 상에서 운영을 못하는 것이 아니나, 태생적으로 효율적이지 못하다
장단비교
- 예를 들어 구매 내역이나 게임의 로그 같은 데이터들은 매 초마다 엄청난 양이 생성되지만 한번 저장되고 난 뒤에는 수정될 일이 거의 없다
- 이런 데이터들을 저장하는 데 데이터의 일관성을 보장하기 위해 ACID 트랜잭션을 지원할 필요는 없을 것이다.
- 거기다 생성되는 데이터의 양도 많기 때문에 장비의 성능에도 상당한 영향을 미칠 것이다. NoSQL은 이러한 데이터들을 효율적으로 저장할 수 있다.
- 여러 대의 장비에 빠른 속도로 저장이 가능하며, 데이터의 양이 누적되더라도 얼마든지 수평적 확장이 가능하기 때문이다.
활용예
- 트위터, 페이스북: 게시글 저장에 사용
- 쏟아지는 트래픽을 모두 RDB에 저장한다면, 글작성 -> 저장 까지 한 참이 소요된다
- 각종 검색엔진: 텍스트 형태소 분석 -> 토큰 -> 역 인덱스구조 맵핑
결론
용도에 맞게 상호보완적으로 사용해야 한다