ehoiloveyourself.log
로그인
ehoiloveyourself.log
로그인
[DB] RDBMS vs NoSQL
EHOI
·
2023년 2월 7일
팔로우
0
RDBMS
TIL
db
nosql
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
innoDB
MyISAM
MySQL 8.0의 디폴트 엔진(하지만 MyISAM으로 변경 가능)
더 큰 가용성을 제공
엔진 자체 내에서 행 캐시와 인덱스 캐시를 결합
파일시스템 블록 캐시에 의존
행 수준의 잠금
테이블 수준의 잠금
ROW COUNT를 가지고 있어서 조회시 빠르다
트랜잭션 처리, 대용량 데이터를 다루기에 좋다
트랜잭션이 필요없고 조회기능이 많을 때 좋다
Wiredtiger
MongoDB의 디폴트 엔진
LSMTree(로그 기반 병합 트리)를 이용
저장 성능 향상
읽기 성능 저하 → 블룸 필터로 보완
체크포인트
60초마다 체크포인트를 생성하는데,
갑자기 종료되거나 오류가 발생했을 때 마지막 체크포인트를 기반으로 복구가 가능하다.
저널링 = 로깅
체크포인트 사이의 모든 데이터의 수정사항을 유지한다.
저널링을 이용하면 마지막 체크포인트 이후의 수정된 모든 데이터를 복구할 수 있다.
압축
모든 컬렉션 및 인덱스에 압축을 지원한다.
메모리
서버 메모리의 약 50%를 차지한다.
MAX( (서버 메모리 - 1GB) * 0.5 , 256MB )
EHOI
#성장 #단단함 #평온함
팔로우
이전 포스트
[DB] 데이터베이스 트랜잭션
다음 포스트
[DB] 인덱스
0개의 댓글
댓글 작성