NoSQL 약자의 의미는 여러 가지가 있는데
대체로 Not only SQL가 쓰인다.
그 의미는 SQL를 안쓴다는 것이 아니라
SQL 뿐만 아니라 다른 기능도 지원한다는 뜻이다.
NoSQL는 관계형 데이터베이스보다
더 다양한 데이터(정형데이터 뿐만아니라 비정형, 반정형 데이터도)를 저장할 수 있고
데이터 저장과 검색에 있어서 매우 뛰어난 성능을 나타낸다.
그러면 NoSQL을 사용하는 이유에 대해 자세히 알아보자.
1. 다양한 데이터 형식을 저장할 수 있다
위에서 말한것처럼 정형, 비정형, 반정형 데이터 모두 처리가 가능하다.
그 이유는 유연한 스키마 때문이다.
위 그림처럼 관계형 데이터베이스의 경우
다른 형식(?)의 데이터가 들어오면 필요한 column을 추가하고
스키마를 정의(집주소column에 들어갈 데이터 크기와 유형 정의)를 해줘야 한다.
하지만 NoSQL은 테이블 구조변경과 스키마 정의 없이
그냥 테이블에 데이터를 추가해주면 된다.
비정형, 반정형 데이터의 경우
데이터 형식이 제각각이지만(column이나 데이터 타입이 달라도)
그대로 저장이 가능하다.
2. 수평확장(Horizontal Scale Out)이 가능하다.
컴퓨터에 용량이 부족할 때를 생각해보자.
수직확장의 경우 컴퓨터에 추가로 스토리지(HDD, SDD)를 장착해
저장공간을 늘리는 것을 말한다. 관계형 데이터베이스는 수직확장만 가능하다.
(수직확장 시 스토리지 추가뿐 아니라 성능을 위해 자원(CPU, RAM)도 확장)
수평확장은 내 컴퓨터 용량을 늘리는 대신 다른 컴퓨터(노드)를
저장소로 사용하는 것이다. 이것을 분산 데이터베이스라고 한다.
NoSQL은 수평확장이 가능하기 때문에
저장공간이 더 필요하면 무한대로 컴퓨터(노드)만 붙이면 된다. 즉 확장성이 좋다!
(수평확장 시 다른 컴퓨터의 자원(CPU, Memory)도 사용)
※관계형 데이터베이스가 수평확장이 안 되는 이유※
수평확장을 해서 데이터가 여러 컴퓨터에 분산되어 있으면
일관성이 떨어져(여러 컴퓨터에 복제된 데이터가 있어서)
관계형 데이터베이스의 가장 큰 장점인
Join과 ACID트랜잭션 기능을 사용하지 못하기 때문이다.
3. 성능이 좋다.
일반적인 NoSQL은 분산 저장으로 Join기능을 사용할 수 없기 때문에
쿼리 수행 복잡도가 감소해 처리 속도가 빠르다.
(분산 저장할 때 조인이 필요한 데이터(같이 있어야 하는 데이터)는 같이 중복 저장한다)
또한 데이터가 여러 컴퓨터(노드)에 분산 중복 저장되어 있어
일부 컴퓨터(노드)가 시스템 오류 또는 데이터 손실이 일어나도
데이터베이스는 정상적으로 사용 및 복구할 수 있다.
NoSQL은 RDBMS(Relational Database Management System)와는 다르게
데이터 구조에 따라 여러 가지 모델이 있다.
Join기능을 제공하는 Document key-value NoSQL모델도 있고
작동원리는 모르겠지만... ACID트랜잭션을 지원하는 NoSQL(MongoDB)도 있다.
그래서 원하는 데이터 관리방식 및
구조(key-value, wide column, graph, document 등)에 따라
NoSQL 데이터베이스 모델을 정해야 한다.
하나하나씩 공부해보자!
'공부-Data Engineer > 데이터베이스' 카테고리의 다른 글
[쉽게 설명한] 데이터베이스 비정규화, 역정규화 (1) | 2020.06.10 |
---|---|
[쉽게 설명한] OLTP, OLAP (0) | 2020.06.09 |
[쉽게 설명한] 관계형 데이터베이스 (0) | 2020.06.04 |
[쉽게 설명한] 정형, 비정형, 반정형 데이터 (0) | 2020.06.03 |
[쉽게 설명한] 데이터 모델링 (1) | 2020.06.02 |