Redis

Redis 는 인메모리 기반이지만 디스크에 데이터를 영구적으로 저장할 수 있는 데이터베이스입니다. 이로 인해 매우 빠른 읽기 및 쓰기 속도를 제공하지만, 메모리 크기를 초과하는 데이터셋은 사용할 수 없다는 제약이 있습니다.

따라서, 아쉽게도 Redis 에서 사용할 수 있는 데이터 크기는 할당된 RAM 용량에 의해 제한됩니다.

B) Sorted Set

일반적으로 Set 자료구조는 저장된 value 들을 unique 하게 관리하기 위해 사용된다. 이 때 저장된 value 들 사이의 순서는 관리되지 않는다.

하지만 Redis 에서 제공해주는 자료구조 중 하나인 Sorted Set(또는 ZSET, 둘다 동일한 말이다) 은, 이름 그대로 Set 의 특성을 그대로 가지면서 추가적으로 저장된 value 들의 순서도 관리해준다. 이 때 이 순서를 위해 각 value 에 대해 score 를 필요에 맞게 설정할 수 있으며, 이 score 를 기반으로 정렬이 된다.

C) Redis vs. MongoDB

(공통점) Redis 와 MongoDB 는 모두 유연한 스키마 설계, 수평적 확장성 및 고가용성을 제공하는 NoSQL 데이터베이스입니다. 이를 사용하여 문서 및 이미지와 같은 비정형 데이터를 보다 유연하게 저장할 수 있습니다. 관계형 데이터베이스와 달리 스키마를 사용하지 않는 동적 데이터 모델을 사용할 수 있습니다.

C.1) 크기 조정

MongoDB 는 수평적 크기 조정을 통해 대용량의 데이터를 효율적으로 처리할 수 있습니다. 샤딩을 사용하여 여러 리전 및 노드에 데이터를 배포합니다. 샤딩 간 작업을 통해 여러 샤드를 쿼리하고 업데이트할 수 있습니다.

Redis 는 MongoDB 와 같은 수준의 확장성을 제공하지 않습니다. 기본적으로 Redis 는 기본 작업에 단일 샤드만 사용합니다. 해시를 기반으로 샤딩을 수동으로 유지 관리해야 하므로 관리하기가 더 복잡합니다. Redis 에는 샤드 간 기능도 없습니다.

D) Redis

Redis 는 데이터를 RAM 에 저장하므로 메모리에서 직접 데이터에 액세스할 수 있습니다. 이렇게 하면

  • (+) 응답 지연 시간이 짧아지지만
  • (-) 저장할 수 있는 데이터의 양도 제한됩니다.

Redis 는 데이터 내구성을 제공하는 스냅샷 및 Append Only File(AOF) 로깅을 통해 데이터 세트를 디스크에 저장합니다.

E) MongoDB

MongoDB 는 문서 데이터 모델을 따라 주로 외부 메모리 스토리지에 데이터를 저장합니다. 데이터를 직렬화 바이너리 JSON(BSON) 문서로 저장합니다. 최대 문서 크기는 16MB 입니다.

자주 액세스하는 데이터에 메모리 캐싱을 사용하면서도 지속성을 위해 주로 디스크 스토리지에 의존할 수 있습니다.

F) Redis 와 MongoDB 비교

F.1) 공통점

Redis 와 MongoDB 는 모두 유연한 스키마 설계, 수평적 확장성, 그리고 고가용성을 제공하는 NoSQL 데이터베이스입니다. 이 두 시스템은 문서나 이미지 같은 비정형 데이터를 보다 자유롭게 저장할 수 있게 해줍니다. 관계형 데이터베이스와 달리, 스키마를 사용하지 않는 동적 데이터 모델을 지원하여 다양한 형태의 데이터를 처리할 수 있습니다.

F.2) 차이점

F.2.1) 크기 조정 (Scalability)

F.2.2) MongoDB

  • MongoDB 는 대규모 데이터를 효율적으로 처리하기 위해 수평적 크기 조정(scale out) 을 지원합니다. 이를 위해 샤딩 (Sharding) 기술을 사용하여 여러 리전 (region) 과 노드 (node) 에 데이터를 분산시킵니다. 샤딩된 데이터에 대해 여러 샤드를 동시에 쿼리하거나 업데이트할 수 있어 대규모 트래픽에도 유연하게 대응할 수 있습니다.
  • MongoDB 는 다중 문서 원자성, 일관성, 격리성 및 지속성 (ACID) 트랜잭션을 지원합니다. 따라서 여러 작업에서 데이터의 일관성을 유지할 수 있습니다.
  • MongoDB 는 쿼리에서 높은 수준의 유연성을 제공하며 복잡한 공간 계산 및 데이터 분석 기능을 수행할 수도 있습니다. MongoDB 는 고급 쿼리를 간소화하기 위해 JSON 과 유사한 구문을 지원하는 MongoDB 쿼리 언어 (MQL) 를 사용합니다.

F.2.3) Redis

  • Redis 는 MongoDB 만큼의 확장성을 제공하지 않습니다. 기본적으로 Redis 는 단일 샤드를 사용하며, 해시 (Hashing) 기반으로 샤딩을 관리해야 합니다. 이는 관리가 더 복잡하며 자동화된 기능이 부족합니다. 또한, Redis 에는 샤드 간 작업을 지원하는 기능이 없어 확장성 면에서 제약이 있습니다.
  • Redis 는 내장 ACID 지원 기능을 제공하지 않습니다. 하지만 MULTI 명령을 사용하여 여러 명령을 단일 원자 연산으로 그룹화할 수 있습니다.
  • Redis 는 복잡한 쿼리 및 검색 기능보다는 빠른 키 - 값 액세스 작업에 최적화되어 있습니다.

F.3) 성능 및 메모리 관리

F.3.1) Redis

Redis 는 데이터를 RAM에 저장하여 매우 빠른 응답 시간을 제공합니다. 메모리에 직접 접근하므로 지연 시간이 짧아 실시간 처리가 필요한 애플리케이션에 적합합니다.

  • 장점: 응답 속도가 매우 빠릅니다.
  • 단점: RAM 용량에 따라 저장할 수 있는 데이터 양이 제한됩니다.

또한, Redis 는 스냅샷 (snapshot)Append Only File(AOF) 로깅 기능을 통해 데이터를 디스크에 저장함으로써 내구성을 보장합니다.

F.3.2) MongoDB

MongoDB 는 주로 외부 메모리 스토리지 (디스크) 에 데이터를 저장하며, 문서 기반의 데이터 모델인 BSON(Binary JSON) 을 사용해 직렬화된 형태로 데이터를 보관합니다.

  • 최대 문서 크기는 16MB 입니다.

MongoDB 도 자주 액세스되는 데이터에 대해 메모리 캐싱을 사용할 수 있지만, 기본적으로 디스크 스토리지에 의존하여 지속성을 유지합니다.


위 내용을 종합하면, 두 시스템은 각각의 강점을 가지고 있으며 사용 목적과 요구 사항에 따라 선택될 수 있습니다:

  • 실시간 성능과 빠른 응답 시간이 중요한 경우에는 Redis가 적합하고,
  • 대규모 데이터 처리와 유연한 확장이 필요한 경우에는 MongoDB가 더 나은 선택일 것입니다.
  • 쿼리 속도가 빠른 임시 데이터 스토리지의 경우 Redis 를 사용하세요. 풍부한 쿼리를 지원하면서 복잡한 데이터를 장기간 영구 저장하려면 MongoDB 를 사용하세요.

Redis is a remote in-memory data store (similar to memcached). It is a server. A single Redis instance is very efficient, but totally non scalable (regarding CPU). A Redis cluster is sca

G) Redis vs. RocksDB

Redis 는 원격 메모리 내 데이터 저장소로, memcached 와 유사합니다. Redis 는 서버 형태로 동작하며, 단일 인스턴스는 매우 효율적이지만 CPU 확장성 측면에서는 한계가 있습니다. 그러나 Redis 클러스터를 사용하면 CPU 확장성이 보완됩니다.

반면에 RocksDB 는 내장형 키/값 저장소로, BerkeleyDB 또는 LevelDB 와 유사합니다. RocksDB 는 라이브러리 형태로 제공되며, 멀티 스레딩을 지원하고 로그 구조 병합 트리 (log-structured merge trees) 를 기반으로 한 지속성을 제공합니다.