미니 프로젝트를 기획하기 앞서 어떤 데이터베이스를 사용할까에 대한 이야기가 나와서 데이터베이스에 대해 알아볼 시간이 필요했다.

 

RDBMS

관계형 데이터베이스로, 사전 정의된 스키마가 필요하다

테이블 기반 데이터베이스로 테이블과 테이블이 관계를 가진다

테이블간 관계에서 외래키를 이용한 join이 가능하다

장점 단점
데이터 무결성 보장(데이터의 정확성과 일관성을 유지하고 보증하는 것)
유지보수성
사용 용이성
쿼리 유연성
특정 도메인에 데이터 모델이 적합하지 않을 수 있다
수직적으로는 확장할 수 있으나 수평적 확산이 어렵다(엄격한 일관성 요구 때문)
스키마가 정규화 되면서 여러 조인을 사용하여 성능이 저하될 수 있다

사용하는 경우

- 이후에 데이터 쿼리식을 예측하기 어려운 경우

- 도메인의 데이터가 매우 규칙적인 경우

- 테이터베이스를 사용할 때 안전과 오류 감지가 필요한 경우

- 데이터의 상호 관련성이 낮은 경우

 

NoSQL

사전 정의된 스키마가 필요하지 않은 "비정형 데이터"

REBMS의 복잡도와 용량 한계를 극복하기 위한 목적으로 등장

정해진 스키마가 없어 자유롭게 데이터를 저장할 수 있다.

장점 단점
높은 확장성
높은 가용성(무중단 서비스 가능)
수평적 확장성이 좋다
대용량 데이터용으로 설계된 데이터베이스 쿼리에 최적화 되어있다
데이터베이스에 일관성이 약하다.
호환성이 좋지 않다
표준화가 부족하다

사용하는 경우

- 최종 데이터 모델을 미리 알기 어려운 경우

- 데이터 모델 요구 사항이 자주 변경되는 경우

- 빅데이터를 처리하며 수평 확장이 필요한 경우

- 도메인에 중첩이 많이 일어나는 경우

 

수직적 확장성 VS 수평적 확장성

수직 : 같은 타입의 인스턴스 여러개로 확장시키는 형태

수평 : 단일 인스턴스 자체의 성능을 업그래이드 하는 형태

 

수직적 확장과 수평적 확장의 개념이 이게 확실한지 모르겠다...

반응형

+ Recent posts