MongoDB
mongo는 humongous를 줄인 표현이다. 즉 '매우 큰 DB'라는 뜻
장점
1. Schema-less 구조를 사용 >> 다양한 형태의 데이터를 저장 가능 / 데이터 모델의 유연한 변화 가능
2. Read / Write 성능이 뛰어남
3. JSON 구조의 활용으로 데이터를 직관적으로 이해 가능하다
단점
1. 많은 인덱스 사용 시, 충분한 메모리 공간 확보가 필요하다
2. 데이터 공간 소모가 RDBMS에 비해 많다(비효율적인 Key 중복 입력)
3. 복잡한 JOIN 사용 시 성능 제약이 따른다
4. 트랜잭션 지원이 RDBMS 대비 미약하다
특징
1. Memory Mapped(데이터 쓰기 시에 OS의 가상 메모리에 데이터를 넣은 후 비동기로 디스크에 기록하는 방식)를 사용
방대한 데이터를 빠르게 처리 가능하다
2. OS 메모리를 활용하기 때문에 메모리가 차면 하드디스크로 데이터를 처리하여 속도가 급격히 느려진다
3. 데이터 양이 많을 경우 일부 데이터가 손실될 가능성이 존재한다
Redis
Remote Dictionary Server. 즉, 원격 Dictinary 자료구조 서버
키(Key) - 값(Value) 쌍의 해시 맵과 같은 구조를 가진 비관계형(NoSQL) 데이터베이스 관리 시스템(DBMS)이다.
>> Key로 올 수 있는 자료형은 기본적으로 String이지만, Value는 다양한 타입을 지원한다
Redis 백업 방식 2가지
- RDB (Redis Database) : 메모리에 있는 데이터 전체에서 스냅샷을 작성하고, 이를 디스크로 저장하는 방식
- 특정 시간마다 여러 개의 스냅샷을 생성하고, 데이터를 복원해야 한다면 스냅샷 파일을 그대로 로딩만 하면 됨.
- 하지만, 스냅샷 이후 변경된 데이터는 복구할 수 없음. → 데이터 유실(loss)
- AOF (Append Only File) : 데이터가 변경되는 이벤트가 발생하면 이를 모두 로그에 저장하는 방식
- 데이터를 생성, 수정, 삭제하는 이벤트를 초 단위로 취합 및 로그 파일에 작성
- 모든 데이터의 변경 기록들을 보관하고 있으므로 최신 데이터 정보를 백업 가능
- RDB 방식에 비해 데이터 유실량이 적음(초 단위 데이터는 유실 가능).
- RDB 방식보다 로딩 속도가 느리고 와 파일 크기가 큰 것이 단점
>> 레디스는 일반적으로 AOF와 RDB를 동시에 사용하여 데이터를 백업한다.
특징
1. 메모리 기반의 데이터베이스이기 때문에, Disk를 기반으로 하는 RDBMS보다 read가 빠르다
2. 레디스는 메모리에 데이터를 저장하기 때문에 저장 공간에 제약이 있어, 주로 보조 데이터 저장소로 사용한다
3. Redis의 데이터는 String, List, Set, Hash, Sorted Set, Bitmap, JSON 등 다양한 데이터 타입을 지원한다. 따라서, 애플리케이션의 요구 사항에 알맞은 다양한 데이터 타입을 활용할 수 있다.
4. Redis는 쿼리문이 필요로 하지 않으며, 단순한 명령 구조로 데이터의 저장, 조회 등이 가능하다. 또한, Java, Python, C, C++, C#, JavaScript, PHP, Node.js, Ruby 등을 비롯한 다수의 언어를 지원한다.
5. 최신 버전의 레디스는 PUB/SUB 형태의 기능을 제공하여 메세지를 전달할 수 있다. 즉, 데이터 저장 뿐만 아니라 다양한 목적으로 사용할 수 있다.
6. Redis는 싱글 스레드 방식을 사용하여 한 번에 하나의 명령어만을 처리한다. 따라서 연산을 원자적으로 처리하여 Race Condition이 거의 발생하지 않는다.