Elasticsearch 테스트

Elasticsearch의 저장속도 및 조회속도가 거의 실시간으로 빠르다고 하기에 RDBMS에 비하면 얼마나 빠를까 궁금해서 데이터 만개를 생성해서 저장하고 조회해보겠습니다.

데이터 저장 테스트

데이터 저장을 위한 2개의 컨트롤러를 생성했습니다.
/api/register1은 elasticsearch에 저장하는 api, api/register2는 MySQL에 저장하는 api입니다.

@PostMapping("/api/register1")
    public String register1(){
        List<User> list = new ArrayList<>();

        for(int i =1; i <= 10000; i++){
            list.add(new User(i+"", "연준"+i,i));
        }


        userRepository.saveAll(list);
        return "성공";
    }

    @PostMapping("/api/register2")
    public String register2(){
        List<Member> list = new ArrayList<>();

        for(int i =1; i <= 10000; i++){
            list.add(new Member((long) i, "연준"+i,i));
        }

        memberRepository.saveAll(list);

        return "성공";
    }

데이터 저장 테스트 결과

데이터 저장 성능에 굉장한 차이를 보였습니다. Elasticsearch는 3.3 s, MySQL은 2 m 30.90 s 의 결과를 보여주었고 굉장한 차이를 보여주었습니다.

데이터 조회 테스트1

먼저 MySQL의 index를 이용한 조회와 Elasticsearch의 조회 속도를 비교해보겠습니다.

// Elasticsearch
@GetMapping("/api/search1/{id}")
    public User get1(
            @PathVariable String id
    ){
        return userRepository.findById(id).get();
    }

// MySQL
@GetMapping("/api/search2/{id}")
    public Member get2(
            @PathVariable String id
    ){
        return memberRepository.findById(Long.valueOf(id)).get();
    }

데이터 조회 데트스 결과1

  • Elasticsearch : 최소값 10 ms, 평균 72 ms
  • MySQL : 최소값 40 ms, 평균 112.5 ms
    MySQL 인덱스를 이용한 조회를 했는데도 최소값과 평균값의 큰 차이를 보여주었습니다.
    이 테스트의 결과를 통해 Elasticsearch의 조회속도가 MySQL에 비해 굉장히 빠르다는 것을 보여주었습니다.

데이터 조회 테스트2

이번에는 Elasticsearch와 MySQL full scan의 조회 속도를 비교해보겠습니다.

    // Elasticsearch
    @GetMapping("/api/search3/{name}")
    public User get3(
            @PathVariable String name
    ){
        return userRepository.findFirstByName(name).get();
    }

    // MySQL
    @GetMapping("/api/search4/{name}")
    public Member get4(
            @PathVariable String name
    ){
        return memberRepository.findFirstByName(name).get();
    }

데이터 조회 테스트 결과2

  • Elasticsearch : 최소값 19 ms, 평균값 70 ms
  • MySQL : 최소값 24 ms, 평균값 91 ms

'DB' 카테고리의 다른 글

정규화  (0) 2024.01.23
Elasticsearch Spring Boot에 적용해보기  (1) 2024.01.10
Elasticsearch 란?  (1) 2024.01.10
[MySQL] SELECT 문  (0) 2024.01.05
[MySQL] 계정 생성 및 권한 부여  (0) 2024.01.05