DevOps/Database

RDB와 NOSQL의 용도 차이

soohey 2022. 8. 2. 10:48

MongoDB와 PostgreSQL 모두 사용해보면서 느꼈던 차이점을 정리해보았다!

크게 보면 RDB(Mysql, oracle, PostgreSQL)과 NoSql(mongoDB)로 나눌 수 있었고, 특징을 나누어 보았다.

RDB

 - 관계형 데이터베이스

  • 엑셀 시트처럼 정해진 번호의 칸 안에 내용을 쌓아간다.
  • 내용을 찾아 정렬하는 속도가 매우 빠름
  • 2차원의 테이블 형태
  • 데이터 상관관계에서 개체 간의 관계를 표현
  • 상호 관련성을 가진 테이블 집합
  • 만들고 이용하기 쉬움, 확장이 쉬움
  • 여러 개의 테이블을 조합해 원하는 데이터를 찾아옴
  • 트랜잭션, ACID
  • 데이터 구조가 명확하며 변경될 여지가 없으며 명확한 스키마가 중요한 경우 사용
  • 중복된 데이터가 없어(데이터 무결성) 변경이 용이하기에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합함

PostgreSQL

  • 객체-관계형 데이터베이스 관리시스템(ORDBMS)
  • 쿼리가 복잡해질수록 성능이 잘 나오는 편

트랜잭션

  • 데이터베이스 내에서 한 번에 수행될 연산들
  • 한 번에 완료되어야 하고 하나라도 실패하면 모두 취소되는 원자성을 가짐
  • 성공 시 커밋, 실패 시 롤백

NOSQL

  • Not only sql
  • RDB보다 융통성있고 데이터의 저장 및 검색에 특화된 메커니즘
  • 키-값 저장 기법을 사용해 응답속도나 처리효율에 뛰어난 성능
  • 관계형 모델 사용 x, 테이블 간 연결해서 조회하는 조인이 없음
  • 비 SQL 인터페이스를 통한 접근
  • 여러 데이터베이스 서버를 묶어(클러스터링) 하나의 데이터베이스를 구성
  • 데이터 처리 완결성(ACID)을 제공 x
  • 데이터의 스키마, 속성을 다양하게 수용하고 동적으로 정의
  • 데이터베이스의 중단 없는 서비스와 자동복구 기능 지원
  • 초고용량 데이터 처리를 위한 비 관계형 데이터 저장소에 비구조적인 데이터를 저장하기 위한 분산 저장 시스템
  • 여러 대의 컴퓨터에 데이터를 분산 저장 처리
  • 일관적이지 않음, 복잡한 데이터 쿼리 불가능, 기존 데이트 업데이트 시 시간 소요
  • 데이터 분산에 용이, 복제 및 장애 대응에 용이, 데이터를 고속으로 처리
  • 정확한 데이터 구조를 알 수 없고 데이터가 변경/확장이 될 수 있는 경우 사용하는 것이 좋음
  • 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시에는 모든 컬렉션에서 수정을 해야 함. 업데이트가 많이 이루어지지 않는 시스템이면 좋고, scale-out이 가능하다는 장점을 활용해 대용량 데이터를 저장해야하는 시스템에 유리

MongoDB

  • Document  DB
  • JSON, XML과 같은 Collection 데이터 모델 구조

Scale-out

  • 수평적으로 부하를 분산
  • 접속된 서버를 여러대로 늘려 처리율을 높임
  • 로드밸런싱(각 서버의 부하를 균등 처리)가 필수. 서버 한대가 다운돼도 다른 서버로 막기 가능
  • 데이터 변화가 적은 웹서버에 적합

Scale-up

  • 서버의 용량을 올려 확장
  • CPI, RAM 등을 추가해 고성능의 부품, 서버로 교체
  • 한 대에 서버에서 모든 데이터를 처리. 데이터베이스 서버에 적합. 빈번히 갱신하기 때문에 여러 대에서는 정합성(데이터가 모순 없이 일치)하기가 어렵기 때문임

동기

  • 요청과 결과가 동시에 일어나야 함
  • 결과가 나올 때까지 무한 대기

비동기

  • 요청과 결과가 동시에 나오지 않음
  • 결과가 나올때까지 다른 작업 가능
  • 추구하는 행위가 다름

요약

RDB는 조인같은 쿼리로 여러 개의 테이블을 묶어 검색하는데 용이함. 데이터가 많아지고 테이블간 관계가 복잡할수록 연산이 느려진다.

NoSQL은 대용량 데이터를 처리할 때 주로 사용. 복잡한 쿼리를 사용하지 못하고 데이터가 일관되지 못함. 하지만 빠르다!