인 메모리 데이터베이스는 컴퓨터의 주 메모리에 데이터를 저장한다.
그렇다면 메모리란 무엇일까?
메모리는 컴퓨터 하드웨어 구성요소 3가지 중 하나로 저장을 담당하고 있는 부품이다.
컴퓨터 하드웨어 구성요소 3가지는 아래와 같다.
컴퓨터가 데이터를 저장할 때 사용하는 것이 바로 RAM이고 인 메모리 데이터베이스는 여기에 데이터를 저장한다.
그럼 왜 RAM에 저장할까?
컴퓨터의 기본적인 동작 과정을 단순화하면 다음과 같다.
1. 입력을 받으면 RAM에 저장된다.
2. RAM에 적힌 값과 존재하는 명령을 해석하여 CPU가 연산한다.
3. 결과를 RAM에 보내주면 그것을 출력한다.
즉, CPU는 그저 메모리에 올라와있는 프로그램의 명령어들을 실행할 뿐이다.
출처
메모리 계층 구조는 위로 갈수록 속도는 빠르고 용량은 작으며, 아래로 갈수록 속도는 느리지만 용량은 크다는 특징이 있다.
CPU Register와 CPU Caches는 CPU 내부에 존재하기 때문에 CPU가 빠르게 접근이 가능하다.
메인 메모리는 CPU 외부에 존재하기 때문에 레지스터와 캐시보다 상대적으로 느리다. 메인 메모리를 읽어오기 위해선 인터럽트를 통해 커널모드에서 가져올 수 있다.
하드 디스크는 심지어 CPU가 직접 접근조차 할 수 없고, 디스크의 데이터를 메모리로 이동시키는 과정을 거쳐야 한다.
따라서 메모리에 데이터를 저장하는 In-Memory DB는 디스크 기반 DB보다 훨씬 빠른 성능을 낼 수밖에 없다.
Disk I/O
운영체제 입장에서 데이터베이스도 결국 하나의 프로세스다.
Disk I/O가 필요한 경우, 해당 프로세스는 Blocked 상태로 들어가고, 요청이 완료될 때까지 대기해야 한다. 그동안 CPU는 다른 프로세스를 처리한다. 즉, 디스크 접근에는 불가피하게 대기 시간이 발생한다.
Memory
반대로 메인 메모리에 접근하는 경우, 단순히 인터럽트를 발생시켜 커널 모드로 전환할 뿐, 프로세스가 Blocked 상태가 되지 않는다. CPU는 Ready와 Running 상태를 오가며 빠르게 연산을 이어갈 수 있다.
즉, Memory가 프로세스 관점에서도 Disk I/O보다 빠를 수 밖에 없다.
출처
위 이미지는 인메모리 데이터베이스의 구조를 나타낸다.
인메모리 데이터베이스는 RAM에 데이터를 저장하기 때문에 기본적으로 영속성(persistence)이 보장되지 않는다. 프로세스가 종료되면 데이터가 유실될 수 있다. 이를 보완하기 위해 다음과 같은 기법들이 사용된다.
스냅샷(Snapshot)
트랜잭션 로깅(Transaction Logging)
비휘발성 메모리 (NVRAM)
또한 저장 공간이 RAM에 한정되기 때문에, 용량이 부족하면 기존 데이터를 삭제하거나 새로운 입력을 거부해야 한다.
따라서 인메모리 DB는 영속성이 반드시 필요하지 않은 데이터(예: 로그인 세션, 임시 데이터)나 테스트 환경에서 특히 유용하다.
1. 시스템 측면
| 디스크 기반 DB | In-Memory DB | |
|---|---|---|
| 저장장치 | 디스크 중심 | 메모리 중심 |
| 데이터 접근(index) | 디스크 I/O를 최소화 하기 위한 B-tree | 메모리에 대한 최적회된 접근 T-tree |
| DB위치 | 디스크 | 메모리(필요 시 디스크 반영) |
| DB크기 | 디스크 크기 | 가상 메모리 크기 |
2. 복구 및 안정화 측면
| 디스크 기반 DB | In-Memory DB | |
|---|---|---|
| 운영목표 | 안정적/대용량 | 빠른 응답/고속 처리 |
| 회복기법 | UNDO/REDO, Checkpoint, Chadow Paging | 보조 메모리, 디스크를 활용한 이중화 |
인메모리 데이터베이스는 속도가 중요한 상황에서는 탁월한 성능을 발휘하지만, 영속성과 용량 한계라는 약점을 가진다. 따라서 목적에 맞는 데이터 저장 방식을 선택하는 것이 중요하다.
http://xn--studyhardd-9v67b.tistory.com/93
https://github.com/2021-pick-git/2021-pick-git.github.io/blob/main/_posts/2021-10-21-spring-cache-with-redis-performance.md
영속성이라는 개념이 너무 어려워요