728x90
in-memory DB
인메모리 데이터베이스란 디스크가 아닌 메모리에 데이터를 저장해서 사용한다는 의미다.
특징은 크게 3가지가 있다.
- 빠른 속도
- 휘발성
- 다양한 자료구조
ACID 원칙은?
- 원자성
- 일관성
- 고립성
- 내구성
데이터베이스가 가져야할 4가지 원칙에서 인메모리 데이터베이스는 위 3가지는 지켜지지만, 휘발성이라는 특성으로 인해 내구성을 지키기 어렵다. 따라서 추가적인 조치가 필요하며, 이에 따른 방법은 스냅샷, 트랜잭션 로깅, NVRAM 등이 있다.
Redis
Redis는 캐싱, 메시지 브로커 역할을 하는 오픈소스 형태의 인메모리 데이터베이스다.
하지만, 이것은 기존의 디스크 저장 방식의 데이터 베이스가 필요하지 않는 상황에서 사용된다.
디스크가 아닌 메모리에 데이터를 읽고 쓰기 때문에 매우 빠른 성능을 제공한다.
Redis 역시 앞서 말한 인메모리 DB의 약점인, 데이터 손실, 내구성이 약하다는 단점을 가지고 있다. 이를 해결하기 위해 Persistence기능을 제공한다. 이 기능을 통해 충격을 받거나 다운될 때 디스크에 데이터를 저장하고 복원할 수 있도록 한다.
Redis persistence 기능은 몇가지 방법이 있다.
- 스냅샷
- AOF
다만, 스냅샷은 스냅샷 간의 충돌에서 데이터 손실이 일어날 수 있고, AOF는 스냅샷에 비해 느려지는 속도와 리소스를 많이 사용하는 단점이 있다
Redis의 형태
Redis는 key - Value 형태로 구성되며, 다양한 자료구조를 개발자가 활용할 수 있도록 도와준다.
위 그림에서도 보이듯이, 해시 테이블을 구현하여 고유한 키와 데이터 값에 대한 포인터를 저장하는 Nosql 데이터베이스 유형이다.
다른 데이터베이스와의 차이
특징/ 유형 |
관계형 데이터베이스 | 그래프 데이터베이스 | 문서 데이터베이스 | 키-값 데이터베이스 |
데이터 모델 | 테이블(관계형) | 그래프 | 문서(반구조화) | 키-값 쌍 |
데이터 관계 | 복잡한 관계 지원 | 그래프 구조 내 관계 지원 | 문서 내에 중첩된 데이터 지원 | 독립된 키-값 쌍, 관계 없음 |
쿼리 언어 |
SQL | 그래프 쿼리 언어 | 풍부한 쿼리 언어 (JSON 쿼리) | key 로만 데이터 액세스 |
성능 | 복잡한 쿼리 및 JOIN 수행 가능 | 관계 트리버스 및 관계 쿼리에 특화 | 유연한 데이터 모델과 쿼리 가능 | 뛰어난 성능, 단순한 구조 |
사용 사례 |
구조화된 데이터 및 관계가 필요한 경우 | 네트워크, 추천, 사회적 관계에 중점 | 반구조화되거나 반-정형 데이터 관리 | 단순한 키-값 쌍 저장에 중점 |
확장성 | 일반적으로 수직적 확장 | 일반적으로 수직적 및 수평적 확장 | 일반적으로 수직적 및 수평적 확장 | 수평적 확장에 적합 |
고가용성 | 복제 및 클러스터링으로 고가용성 보장 | 높은 연결성과 데이터 모델에 기반한 고가용성 | 복제 및 샤딩을 통한 고가용성 | 복제 및 클러스터링으로 고가용성 보장 |
'DB(MySQL, MongoDB, Redis, Kafka) > Redis' 카테고리의 다른 글
Redis Pub/ Sub (0) | 2024.01.10 |
---|---|
Spring Boot에서 Redis Cache 사용 (0) | 2024.01.06 |
Redis 데이터 타입과 기본 명령어 (0) | 2024.01.05 |