디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있는 데이터베이스이다.
디스크 검색보다 자료 접근이 훨씬 빠른 것이 가장 큰 장점이다. 데이터 양의 빠른 증가로 데이터베이스 응답 속도가 떨어지는 문제를 해결할 수 있는 대안이 인 메모리 데이터베이스이다. 전형적인 디스크 방식은 디스크에 저장된 데이터를 대상으로 쿼리를 수행하지만, 인 메모리 방식은 메모리상에 색인(인덱스)을 넣어 필요한 모든 정보를 메모리상의 색인(인덱스)을 통해 빠르게 검색할 수 있다.
단점이라면 매체가 휘발성이라는 것이다. DB 서버 전원이 갑자기 꺼지면 안에 있는 데이터들이 삭제된다. 그래서 보통은 로그인 세션 같은, 서버가 꺼져서 날아가도 상관 없는 임시 데이터에 주로 쓰인다. 거기다 속도 때문에 쓰는 것이기에 압축은 하지 않으며, 데이터에 비해 RAM 용량이 넉넉하지 않을 경우 가상 메모리를 쓰게 되어 역효과가 일어나기도 한다.
물론 DBMS의 속성 중 하나인 Durability(지속성)를 보장하기 위하여 메모리에 INSERT/UPDATE/DELETE된 값들은 모두 디스크에 로그로 기록하며, DBMS가 재구동될 때 디스크로부터 로그 파일을 읽어와 메모리에 DBMS 구조를 모두 재구축하기도 한다.
ACID
ACID는 데이터의 유효성을 보장하기 위한, 트랜잭션의 성질이다.
트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.
- Atomicity(원자성): 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장한다. 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.
- Consistency(일관성): 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지한다.
- Isolation(독립성): 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장한다.
- Durability(지속성): 성공적으로 수행된 트랜잭션은 시스템이 고장나더라도 영구적으로 반영되어야 한다.
한편, 기존 DBMS 제품도 인 메모리 데이터베이스를 사용할 수 있는 옵션을 제공하기도 한다. MySQL/MariaDB의 MEMORY 엔진이 그 중 하나다.
인메모리 DB의 종류로는 Redis, H2, SQLite 등이 있다.
(SQLite에서는 파일명을 :memory:로 설정하면 인메모리 DB로 사용할 수 있다.)
Redis는 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어다. Redis는 다양한 인 메모리 데이터 구조 집합을 제공하므로 다양한 사용자 정의 애플리케이션을 손쉽게 생성할 수 있다. 주요 Redis 사용 사례로는 캐싱, 세션 관리, pub/sub 및 순위표를 들 수 있다. -AWS/ElastiCache
Redis(REmote DIctionary Server)는 프로젝트에 사용해온 MongoDB와 마찬가지로 NoSQL이다. 하지만 MongoDB는 문서형 NoSQL인 반면 Redis는 key-value형 NoSQL이다.
참고
Kang(Alice), Jihye. “레디스(Redis)란 무엇인가?” Medium, Medium, 20 Mar. 2021, https://jyejye9201.medium.com/%EB%A0%88%EB%94%94%EC%8A%A4-redis-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-2b7af75fa818.
좋은 내용 감사합니다 멋지네요! 저도 개발 공부하는 중인데, https://quantpro.co.kr/ 해당 사이트 퀀트 내용 어떤지 의견주시면 감사하겠습니다!