Tech story/Cloud

KT Cloud Dev Tools - IMDB 기술 소개

KT Cloud Crew 2021. 5. 4. 18:38

 

 

배경

 

AI, 빅데이터 등의 기술이 발전함에 따라서 급격하고 꾸준히 증가하는 데이터의 양에 따라, 시스템 혹은 소프트웨어에서 처리해야할 데이터 또한 증가하고 있습니다.

이러한 대용량 데이터 처리 요청에 빠르게 대응하기위해 설계된 DB의 한 종류인 IMDB를 소개하고자 합니다.

 

 

IMDB(In-Memory DataBase)란?

[ 그림 1 - IMDB ( 출처 : https://learnwithmanoj.com/in-memory-database-systems/ )]

IMDB 혹은 MMDB(Main Memory DataBase)는 DB의 데이터를 HDD, SSD 등의 디스크에 저장하지 않고, RAM 즉, 메인메모리에 저장하는 데이터베이스를 말합니다.

IMDB의 장단점은 모두 디스크가 아닌 메모리에 저장된다는 점에서 발생합니다.

 

우선 메모리에 저장되는 특성상 데이터의 I/O 속도가 월등하게 빠릅니다.

디스크 기반의 DB에서 필요한 '원하는 데이터를 찾기 위한 디스크 탐색 시간'이 필요하지 않게되며, 이는 곧 빠른 성능으로 이어집니다.

 

하지만 전력이 차단되거나, 프로세스가 종료되면 메모리의 특성상 저장되어있던 데이터들이 모두 사라진다는 점을 단점으로 꼽을 수 있습니다.

 데이터 영속성을 보장하지 않는다는 것이죠.

 

또한 시스템 Running time에 메모리를 추가 설치하는 것이 불가능하여, 한정된 저장공간이 부족하게된다면 기존의 데이터를 지워야만 새로운 데이터를 입력할 수 있습니다.

메모리를 추가 설치하기 위해, 시스템을 내리게 된다면 앞서 말한 것처럼 저장되어있던 데이터들이 모두 사라지게 되겠죠.

 

데이터 영속성이 얼마나 중요한데 이게 무슨 데이터베이스야? 라고 생각하실 수 있지만, 이러한 단점들은 IMDB 솔루션들의 여러 기법으로 보완되어지고 있습니다.

 

주기적으로 디스크에 데이터를 백업하거나, 프로세스 실행 이후 발생한 I/O 등의 쿼리들을 디스크에 저장했다가 프로세스를 시작할 때 기록되어있는 쿼리를 순차적으로 실행하여 재현(AOF: Append Only File)하는 등, 의도하지 않은 프로세스 종료 등의 상황에 대하여 데이터의 영속성을 보장할 수 있습니다.

저장 공간이 제한적이라는 문제 또한, 데이터 영속성을 보장할 수 있다면 자연스럽게 해결할 수 있겠죠?

 

 

IMDB(In-Memory DataBase)란?

 

[그림 2 - IMDB의 종류]

상용적으로 많이 사용하는 IMDB의 종류로는 'Redis', 'Memcached' 및 'Mysql Memory 엔진'을 꼽을 수 있습니다. 그 중에서도 특히 'Redis'와 'Memcached'를 간단히 비교해보려 합니다.

 

  Redis  Memcached
저장소 In Memory Storage In Memory Storage
저장 방식 Key-Value Key-Value
데이터 타입 String, Set, Sorted Set, Hash, List String
데이터 저장 Memory 및 Disk(for Persistnce) Memory
스레드 싱글 스레드 멀티 스레드
캐싱 용량 Key : 512MB Value : 512MB Key : 250 byte Value : 1MB
Eviction noeviction, <br />allkeys-lru, volatile-lru, <br />allkeys-random, volatile-random, volatile-ttl LRU
  • 데이터 저장 
    Redis의 경우 앞서 말씀드린 데이터 영속성 확보에 대한 수단이 존재합니다. (Disk 저장) 또한, Redis는 싱글 스레드로 동작하며, Memcached는 멀티 스레드로 동작하는 차이가 있습니다.

  • 스레드 
    Memcached의 경우 멀티 스레드를 지원하기 때문에 스케일 업이 유리하지만, Redis로 스케일 업을 수행하려면, Disk에 백업목적의 Data Write가 있어야 하겠죠.(Stand-Alone 기준) 또한, Redis는 싱글 스레드만 지원하기 때문에 한번에 한개의 명령어만 실행할 수 있습니다.

  • 복제 
    Memcached와 달리 Redis는 다양한 Architecture를 지원합니다.
    1. Stand-Alone : 가장 기본적인 단일 노드
    2. Master-Replica (with Sentinel) : R/W를 지원하는 Master와, 이에 대한 복제본인 Replica. Master 장애 발생시 Sentinel의 탐지로 Replica를 승격하여 자동 Fail-over
    3. Cluster : 샤드별 데이터 분산 R/W 및 샤드 내 자동 Fail-Over
  • Data Eviction 정책 
    Memcached는 LRU알고리즘을 통한 Eviction을 지원합니다. 반면, Redis는 6가지 Eviction 정책을 통해 제어할 수 있습니다.

  • 속도
    Write 속도는 Memcached가 우세하며, Read 속도는 Redis 우세합니다.

[ 그림 3 - Redis vs Memcached 속도 ( 출처 : https://stackoverflow.com/questions/10558465/memcached-vs-redis )]

 

마무리

지금까지 디스크 기반이 아닌 ''메모리 기반의 데이터베이스' IMDB란 무엇인지, 장점과 단점은 무엇인지, 또 종류가 무엇이 있는지에 대해 알아보았습니다. 끝까지 읽어주셔서 감사합니다.