RDB VS NOSQL을 파헤치자
1. RDB 의 단점
- 관계형 데이터베이스에서는 컬럼을 추가하려면 기존에 있는 스키마를 수정해야한다.
( 새로운 이벤트가 발생할 때 마다 기존 스키마를 건들여야함)
- 유연한 확정성의 부족 ( 데이터가 많은 테이블 스키마를 변경 한다면 부하가 발생할 수도 있고 컬럼을 계속 추가하면 속도 이슈도 있음)
- 중복 제거를 위해 정규화 진행 ( 여러 테이블을 조인하며 사용함 , CPU 사용 , 조인이 많아 질 수록 응답시간이 느려짐)
- RDB는 기본적으로 한 대의 컴퓨터에 저장 - READ/WRITE가 많아져서 컴퓨터에 부하가 발생 된다면 성능 향상을 함
- > sacle up을 통한 컴퓨터 성능 향상
- > 이중화로 부하를 나눌 수 있다 (WRITE 트래픽이 많으면 결국은 부하가 발생)
- > multi-master, sharding -
- > scale-out - 데이터 서버를 추가하여 성능 향상 ( RDB는 scale-out을 해주면 또 옮겨주고 추가 작업을 해줘야함)
- 트랜잭션 ACID를 보장하려다 보니 DB서버의 성능에 영향을 미침
2. NOSQL
- 정의 :
- MONGODB, REDIS, COUCHDB ...
1) 특징
- 유연한 스키마 : RDB 처럼 컬럼을 사전에 미리 정의하지 않아도 됨
- 중복을 허용 : JOIN을 회피 , application 레벨에서 중복 데이터들을 관리해야 함
- scale -out에 최적화 - 서버 여러 대로 하나의 클러스터를 구성하여 사용 ( 중복을 허용해서 아무 서버에 접근해서 데이터를 가져다 써도 성능 좋음 )
- ACID의 일부를 포기하고 HIGH-THROUGHPUT, low-latency 추구
* 금융시스템처럼 consistency가 중요한 환경에서는 사용하기 조심스러움
3. REDIS
- 정의 : 메모리에 KEY-VALUE 형태로 저장