Redis가 RDBMS보다 빠른 이유

inho ha·2024년 6월 18일
0

서울의 한 수요일.
Redis가 RDBMS보다 빠른 이유에 대하여 질문을 받았습니다.
이에 대하여 면접 과정 혹은 그 이후에 학습한 내용을 정리해 보겠습니다.

첫 번째 이유

Redis는 메모리에 데이터를 저장하기 때문에 디스크에 저장하는 RDBMS보다 빠르다.

이는 구글에 Redis가 빠른 이유를 검색하면 바로 나오는 내용입니다.
맞는 말입니다.
메모리에 데이터를 저장하면 디스크에 저장하는 것보다 빠를 수밖에 없죠.
저도 이전에 구글에 Redis가 빠른 이유를 검색하고, 위 내용을 보고 바로 납득하고 다른 이유를 크게 고민하지 않았습니다.

그러나 요즘은 RDBMS에서 버퍼 캐시, 쿼리 캐시 등에 메모리를 활용하는 경우가 많아졌습니다.
심지어 메모리 기반의 RDBMS도 존재합니다.
그럼 Redis가 RDBMS보다 빠른 이유는 다른 이유가 더 필요합니다.

두 번째 이유

Redis는 index를 생성하지 않기 때문에 RDB보다 insert, update, delete에서 빠르다.

머리를 열심히 굴려 떠올린 이유는 위의 내용이었습니다.
테이블에 설정된 index가 여러 개라면 read를 제외한 연산에 index에 대한 처리에 추가시간이 소요되기 때문입니다.
그렇다고 해서 index를 설정하지 않으면 read 시에 풀 스캔이 필요하여 느려지게 됩니다.

세 번째 이유

Redis는 싱글 스레드 기반이기 때문에 lock을 사용하지 않아서 경합이 없고, 컨텍스트 스위칭 비용이 들지 않아서 빠르다.

Redis 공식 문서에서 당당하게 자랑하고 있는 내용입니다.
멀티 스레드는 공유 자원에 동시에 접근하게 되면 문제가 발생할 수 있어 lock을 사용하여 동시 접근을 제한합니다.
그럼 lock 경합이 발생하여 성능이 저하됩니다.
또 컨텍스트 스위칭의 오버헤드로 CPU 캐시 효율성이 저하되어 성능이 저하됩니다.

네 번째 이유

RDBMS는 Repeatable Read 격리 수준에서 version 을 관리해야 하기 때문에 Redis보다 느립니다.

RDBMS는 Repeatable Read 이상의 격리 수준에서 각 트랜잭션이 독립적인 스냅샷을 볼 수 있도록 하여 데이터 일관성과 동시성을 보장해 줍니다.
대신 여러 version에 대한 관리가 필요하여 성능 저하가 발생합니다.

profile
inho ha / ian(swatchon) / iha(42seoul)

0개의 댓글