[DB] RDBMS vs NoSQL

EHOI·2023년 2월 7일
0

DB

목록 보기
3/6

관계형데이터베이스 (RDBMS)

  • 행과 열이 있는 테이블 형식으로 데이터를 저장한다.
  • SQL 언어를 사용한다.
  • MySQL, PostgreSQL, 오라클, SQL server, MSSQL 등

NoSQL

  • SQL이 없다(No)는 뜻인 줄 알았는데, Not only SQL 이라고 해서 SQL로만 가능한게 아니야! 라는 슬로건과 함께 나타난 데이터베이스다.
  • 그래서 SQL을 사용하지 않는다.
  • 스키마가 유연하여 확장성을 지닌다.
    • 관계가 없어서 대량의 분산 데이터를 저장하는 데에 특화되어 있다.
    • 스키마가 없어서 특정 값을 추가하는 것이 가능하다.
    • NOSQL은 데이터를 중복해서 넣어야 함
  • MongoDB, redis등

MySQL

  • 가장 많이 사용하는 데이터베이스
  • 버전 8.0 이상부터는 innodb 엔진이 디폴트이지만 변경 가능하다.
  • B-tree 기반의 인덱스
  • 쿼리 캐시를 지원하므로 사용자가 반복하여 작성하는 쿼리에 대해서 속도가 빠르다.

MongoDB

  • Binary JSON 형태로 데이터가 저장되지만 JSON을 통해 데이터에 접근이 가능하다.
  • 기본 스토리지 엔진은 와이어드 타이거다.
  • 확장성이 뛰어나 빅데이터를 저장하기에 용이하다.
  • 샤딩, 레플리카셋을 지원한다. (아직 뭔지 모름)
  • 다양한 도메인의 데이터베이스를 기반으로 분석하거나 로깅할 때 좋다.
  • 도큐먼트를 생성할 때마다 유니크 값인 ObjectID를 생성한다.
    • 기본키로써
    • 유닉스 기반의 타임스탬프(4바이트), 랜덤값(5바이트), 카운터(3바이트)로 이루어져 있다.
    • 4-5-3 기억하자.
  • 특징
    • key-value
      • 도큐먼트의 형태가 key-value이다.
      • DB에 저장될때 key의 길이도 저장된다.
        • 즉, review : 완전 좋아요! 라면 review의 길이만큼 6byte가 추가 저장되는 것이다.
    • 스키마가 없다.
      • 유동적으로 데이터를 삽입할 수 있다.
    • JSON 형태의 값으로 추출 가능
    • 2차원 좌표를 인덱싱할 수 있다.
    • collection join이 가능하다.

redis

  • 인메모리 데이터베이스 + key-value 데이터 모델 기반의 데이터베이스
  • 사용 예시
    • pub/sub 기능을 통한 채팅 시스템
    • 다른 데이터베이스 앞단에 두어 사용하는 캐싱 계층
    • 단순한 키-값이 필요한 세션 정보 관리
    • 정렬된 셋 자료 구조를 이용한 실시간 순위표 서비스

데이터베이스의 심장 = 스토리지 엔진

innoDB vs MyISAM

innoDBMyISAM
MySQL 8.0의 디폴트 엔진(하지만 MyISAM으로 변경 가능)
더 큰 가용성을 제공
엔진 자체 내에서 행 캐시와 인덱스 캐시를 결합파일시스템 블록 캐시에 의존
행 수준의 잠금테이블 수준의 잠금
ROW COUNT를 가지고 있어서 조회시 빠르다
트랜잭션 처리, 대용량 데이터를 다루기에 좋다트랜잭션이 필요없고 조회기능이 많을 때 좋다

Wiredtiger

  • MongoDB의 디폴트 엔진
  • LSMTree(로그 기반 병합 트리)를 이용
    • 저장 성능 향상
    • 읽기 성능 저하 → 블룸 필터로 보완
  • 체크포인트
    • 60초마다 체크포인트를 생성하는데,
    • 갑자기 종료되거나 오류가 발생했을 때 마지막 체크포인트를 기반으로 복구가 가능하다.
  • 저널링 = 로깅
    • 체크포인트 사이의 모든 데이터의 수정사항을 유지한다.
    • 저널링을 이용하면 마지막 체크포인트 이후의 수정된 모든 데이터를 복구할 수 있다.
  • 압축
    • 모든 컬렉션 및 인덱스에 압축을 지원한다.
  • 메모리
    • 서버 메모리의 약 50%를 차지한다.
    • MAX( (서버 메모리 - 1GB) * 0.5 , 256MB )
profile
#성장 #단단함 #평온함

0개의 댓글