DB

31. NoSQL과 RDB와의 차이점

옴악핫세 2023. 6. 20. 08:58

RDB 단점

1. 스키마 변경이 어려움 (새로운 column 생성 등...), 유연한 확장이 힘듦

기존 테이블에 대량의 데이터가 쌓였을 때,

새로운 컬럼을 만든다는 것 자체가 Heavy한 write 작업이고

이는 db 서버에 부담을 줄 수 있고 당연히 BE 어플리케이션도 영향을 받아 전체적인 서비스를 사용하는 사용자에게 악영향을 줌

 

2. 정규화 한 db에 전체 데이터를 불러오려면 복잡하고 많은 join이 필요하여 read 성능 하락

정규화를 하면 데이터의 중복을 줄여준다는 장점도 있지만 데이터 조회에 안좋은 영향을 끼침

여러 테이블을 많인 join하는 작업은 db서버의 cpu도 많이 사용하게 되고, 무엇보다도 응답시간이 늘어남....

 

RDB는 기본적으로 한 대의 컴퓨터에 저장

만약 read/write 요청이 순간적으로 많이 들어올 때, RDB 서버에서의 대응 방법은

(1) db 서버 컴퓨터 성능향상 (scale up)

(2) read 요청이 많을 때의 대응법 : 조회 전용 replication db 생성 (복제품)

(3) write 요청이 많을 때 대응법 : multi-master, sharding

but 서비스를 운영중인데 대용량의 데이터를 복사하고 옮기고 하는 작업들은 쉬운 작업이 아님!

그러므로 RDB는 scale-out에 유연한 db는 아님

* scale-out : 데이터 서버를 추가하는 것, scale up은 성능을 향상시키는 것

 

3. RDB의 transaction ACID로 인한 단점도 있음...

RDB에서는 transaction ACID를 보장하려다 보니 DB 서버의 performance에 어느정도 악영향을 끼침

Ex) Isolation을 만족시키려, 수많은 transaction이 동시에 들어올 때, 병렬 처리못하고 하나하나씩 처리해야함.

ACID로 인해 db 성능의 trade off 관계가 있음

 

 

NoSQL (Not Only SQL)

일반적인 특징

1. Document 타입

Ex) Mong go DB, Json Document 형태로 데이터가 저장됨

2. Key-Value 타입

Ex) 카산드라 DB (애플이 사용), DynamoDB (아마존)

→ 검색엔진에 사용

3. Graph 타입

Ex) Tao(페이스북)

 

1. 스키마 변경에 유연함

정형화된 스키마가 없기 때문에, 왼쪽 그림과 같이 key와 value 형식으로 유연하게 데이터를 삽입 가능

오른쪽 그림과 같이 조회도 쉬움

 

단점

RDBMS와 같은게 없어서 스키마 관리는 개발자가 해줘야함

 

 

 

2. 중복 허용 (join 회피)

RDB는 중복 데이터를 줄여서 관리하다 보니 통합 데이터 조회 시, 복잡한 join 으로 인해 성능 저하 문제가 있었음

NoSQL에서는 중복을 허용함!

단점

중복 데이터에 대해서 어플리케이션에서 관리를 해야함!

 

3. Scale-out이 편리 (서버 증설)

서버 여러대로 하나의 클러스터를 구성하여 사용

 

 

4. ACID의 일부를 포기하고, High-throughput, low-latency추구 (많은 처리량, 빠른 응답속도)

금융 시스템처럼 consistency가 중요한 환경에서는 사용하기가 조심스러움

 

 

Redis

key-value 의 db로도 사용하고 , 메모리 cache로도 사용하는 db임

여러가지 데이터 타입을 저장할 수 있음
샤딩된 클러스터 구성 가능

고 가용성 지원 (High Availability = replication 가능, automatic failover)

 

 

Redis 사용 예시 그림

만약에 왼쪽 그림처럼 서버에서 db 처리 요청이 많아지면

 

중간 그림 처럼 BE와 db 사이에 Redis를 Cache로 사용

id 132에 대한 요청이 BE로 들어오면 바로 DB로 가서 찾는 것이 아니라, Redis에서 먼저 찾고

 

오른쪽 그림 처럼 없으면 DB에 가서 찾아서 Redis에 key-value로 저장도 하면서 유저에게 반환함

 

 

이후 id 132 요청이 들어오면 db로 바로 접근하지 않고 캐시에서 데이터를 찾아서 반환함

 

 

RDB도 계속해서 발전하고 있습니다

NoSQL의 출현 배경을 설명하기 위해 RDB의 단점 위주로 설명했지만,

RDB도 높은 처리량과 응답성을 위해 계속 보완하며 (가령 MVCC) 성장을 하고 있기 때문에,

잘 비교하면서 상황에 맞는 적절한 데이터베이스를 사용하는 것이 중요합니다

 

 

 

NoSQL 참고 사이트

1. Redis 테스트 쉽게 해볼 수 있는 사이트

https://redis.io 

 

Redis

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker

redis.io

 

2. NoSQL 정보를 모아 볼 수 있는 유명한 사이트

https://hostingdata.co.uk/nosql-database/

 

NoSQL Databases List by Hosting Data - Updated 2023

The ultimate reference for NOSQL Database Management Systems. Includes Events, Links, Tools, News, Forums, Books, and much more...

hostingdata.co.uk