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은 대용량 데이터를 처리할 때 주로 사용. 복잡한 쿼리를 사용하지 못하고 데이터가 일관되지 못함. 하지만 빠르다!
'DevOps > Database' 카테고리의 다른 글
Mariadb 도커로 로컬 환경 구성하기 (0) | 2023.02.21 |
---|---|
mongoDB 에러 해결 모음 (json serializable err, logger err, BSON byte err) (2) | 2022.11.02 |
mongo compass로 root 계정 생성하기 (0) | 2022.10.25 |