처음 ES를 적용한 목적이 올바르게 달성했는지 확인하기 위해 ES와 RDBMS의 조회 성능을 비교해보는 코드를 작성해봤다.
1. 데이터 삽입
1.1 RDBMS에 데이터 넣기
먼저 RDBMS에 1만개의 데이터를 넣었다. 코드는 다음과 같다.
간단하게 for문을 이용해 넣었으며 1만개의 데이터를 RDBMS에 넣는데 239.622초 걸린 것을 확인할 수 있다.
1.2 ES에 데이터 넣기
다음으로 ES에 데이터를 넣었다. 코드는 다음과 같다.
총 337.457초 걸렸으며 RDBMS보다 40%정도 느리다. 예상대로 ES가 데이터를 역 인덱스로 저장하기 때문에 저장시 더 오래 걸리는 것을 확인할 수 있다.
2. 데이터 조회
데이터 조회에 앞서 엘라스틱 서치와 MySQL의 성능 차이를 확실하게 하기위해 데이터를 약 94만건 넣었다.
2.1 RDBMS로 조회해보기
다음의 SQL로 조회했다.
결과
처음 조회할 때 5초(5000ms)정도 걸렸는데 같은 쿼리를 또 사용하니 warm up이 돼서 859ms 걸렸다.
2.2 ES로 조회해보기
조회 쿼리와 조회시 걸리는 시간은 다음과 같다.
22ms 걸렸다. 해당 결과도 warm up이 된 후 걸린 시간이며 warm up이 되기 전에는 600ms정도 걸렸다.
warm up이 된 경우라 하더라도 성능 차이가 약 859 -> 22로 약 40배 정도 나는 것을 확인할 수 있다.
마치며
elasticsearch를 적용할 경우 검색 속도가 압도적으로 빠른 것을 눈으로 직접 확인했다. 평소 기사나 쇼핑몰의 수많은 데이터가 어떻게 그렇게 빠른 조회가 가능한지 궁금했는데 직접 구현해보니 확실히 이해가 더 잘됐다. 또한 적용 과정에서 ES를 사용할 때의 부가적인 비용이 들기 때문에 가능하면 db에서 인덱스 튜닝을 하거나 쿼리 만으로 성능을 개선해 보는 것이 먼저라는 생각이 들었다.
'프로젝트 > 고민' 카테고리의 다른 글
CQRS패턴 도입 이야기: CQRS 패턴이란? (0) | 2023.05.21 |
---|---|
Elasticsearch 적용 이야기: Kibana 적용기 (1) | 2023.05.13 |
Elasticsearch 도입 이야기: 스프링 부트와 연동하기 (1) | 2023.05.08 |
Elasticsearch 도입 이야기: Elasticsearch란? (0) | 2023.05.07 |
소셜로그인에 팩토리 메소드 패턴 적용하기 (0) | 2023.04.01 |