이번 글에서는 RDB와 In-Memorry DB의 퍼포먼스 비교에 대한 이야기를 해보고자 한다
먼저 이 글을 보는 독자는 RDB와 In-Momorry DB의 차이에 대한 기본적인 지식이 있는 것을 전제로 한다
(하지만 링크는 첨부한다 💁🏻 What is the difference between an in-memory database and a traditional database?)
In-Memorry DB가 RDB에 비해 Cache성 데이터를 Read 하는 것에 있어 그 퍼포먼스가 뛰어나다는 얘기는 익히 들어 알고 있지만
실질적으로 정확한 비교 수치를 확인하고 싶었다
비교 수치를 확인하기 위해 간단한 SpringBoot Application을 생성하고
각 DB는 대중적으로 사용되는 Redis, Oracle을 선택하였다
이번 실험에 환경적인 부분에 대한 설명은 해당 프로젝트 링크로 대신한다
퍼포먼스 비교에 앞서 사전에 정의할 정보는 다음과 같다
1. 비교 대상이 되는 데이터 수는 단일 Schema의 10만 Row 이다
2. 비교 정보는 전체 건 조회, 단건 조회이다
3. 실험 결과에 영향을 미칠 외부 변수를 최소화하기 위해, 별도 프로젝트(모듈) 격리 수준을 고려하지 않는다
4. 각 DB의 Clustering, Replication은 고려하지 않는다
5. RDB는 Indexed Table을 기준으로 한다
거두절미하고 즉시 본론으로 넘어가자
실험 결과
전체 건 조회
시행 횟수 | Oracle (sec) | Redis (sec) |
1 | 10.29 | 11.31 |
2 | 9.99 | 10.5 |
3 | 10.1 | 10.6 |
전체 건 조회에선 Oracle과 Redis 둘 다 비슷한 퍼포먼스로 보이나
매 시행마다 미세하게 Redis의 퍼포먼스가 떨어지는 것을 확인할 수 있다
단 건 조회
검색 대상 Row Id | Oracle (sec) | Redis (sec) |
1 (시작) | 0.0439 | 0.0003 |
50000 (중간) | 0.0509 | 0.0054 |
100000 (끝) | 0.0556 | 0.0004 |
단 건 조회 실험을 통해 생각보다 많은 결과물을 얻을 수 있었다
Oracle(RDB) VS Redis(In-Memory DB) | Oracle (RDB) | Redis (In-Memory DB) |
- Redis의 단건 조회 성능은 Oracle에 비해 최소 1000% ~ 10000% 이상의 월등한 퍼포먼스를 보여줬다 - 조회 대상이 되는 데이터 Row의 위치 값이 양 극으로 향할수록 Redis가 더욱 월등한 퍼포먼스를 보여줬다 |
- Redis에 비해 조회 대상 Row의 위치 값에 관계 없이 어느 정도 일정한 성능을 보여준다 (20~30% 정도 퍼포먼스 차이 존재) - index 정의에 따른 퍼포먼스 차이는 존재한다 (해당 실험의 index 정의는 오름차순) |
- Oracle에 비해 전반적으로 월등한 퍼포먼스를 보여준다 - 양 극점에 있는 Key에 대한 조회 성능이 뛰어나다 - 조회 대상 Key의 위치 값에 따른 명확한 차이가 존재한다 (중간값과 양 극값의 차이가 1000% 이상 존재) |
마치며
본 실험은 제한된 환경에서 재미를 목적으로 진행된 단기 프로젝트에 해당한다
퍼포먼스에 대한 내용은 어느 정도 참고해도 좋지만
실제로 RDB와 In-Memory DB에 대한 도입을 두고 고민 중이라면
실제 운영 환경과 요구사항을 베이스로 정확한 검증을 거친 후 도입하길 바란다
'개발 > Database' 카테고리의 다른 글
[macOS/Intellij/Oracle] ventura 13.0 업데이트 이후 로케일을 인식할 수 없습니다.(SQL Error: 17176) - 해결 (0) | 2022.11.08 |
---|
댓글