ES 적용이 얼마나 성능을 개선시키는지 확인해보기 위해 약 50만개의 영화 관련 데이터를
DB와 ES 클러스터에 채우고 검색 결과를 비교해봤다.
영화 관련 데이터이기 때문에
영화
키워드가 압도적으로 많아 다른 키워드에 비해 시간이 더 소요된다.
DB vs shard1 vs shard8 vs shard8 replica1
shard8, replica1 으로 구성했을 때 가장 많이 개선된 결과를 얻을 수 있었다.
결과
- shard가 1개인 경우 DB 보다 성능이 안나올 수도 있다.
- 키워드로 검색되는 문서의 개수가 많은 경우 DB가 성능이 더 좋을 수 있다.
- 노드, 샤드가 여러개 늘어날수록 경우 성능이 개선됨
- 매칭되는 문서 개수가 적은 겨우 ES가 더 빠른 검색 성능을 보임
ElasticSearch
클러스터
-
1개 이상의 노드로 구성된 것
-
하나 이상의 노드(=서버)가 모인 것
-
클러스터를 통해, 데이터를 저장하고, 색인 및 검색 기능을 제공한다.
노드
-
클러스터에 포함되는 단일 서버
-
데이터를 저장하고 클러스터의 색인, 검색 기능에 참여한다.
인덱스(색인, index)
-
인덱스 = 데이터 저장 공간
-
1개 노드에 여러 개 인덱스 가능
-
1개 인덱스는 여러 개 노드에 분산 저장되어 관리
-
1개 인덱스는 1개 타입 가능
-
elasticsearch의 index 생성 시 기본 구조: 5개의 primary shard + 1개의 replica shard
타입(유형)
-
하나의 색인에서 하나 이상의 타입을 정의할 수 있다.
-
DB의 table과 대응된다.
도큐먼트
-
색인화 할 수 있는 기본 정보 단위이다.
-
예를 들어 어떠한 단일 제품, 단일 고객, 단일 주문에 대한 도큐먼트가 각각 존재할 수 있다.
-
이 문서는 JSON 형식이다.
Shard and Replica
-
색인은 방대한 양의 데이터를 저장할 수 있다.
-
데이터가 단일 노드의 하드웨어 한도를 초과할 수도 있다. (수용하지 못하거나 느려지는 등의 문제 발생)
-
Elasticsearch에서는 이러한 문제를 해결하기 위해, 샤드(Shard)라는 조각으로 색인을 분할하는 기능을 제공한다.
-
Replication은 샤드를 완전히 복사하면서 진행이 되고,
복사된 샤드를 replica shard 기존 샤드를 primary shard라고 부른다. -
replica 샤드는 primary 샤드와 반드시 다른 노드에 저장해야 한다.
-
replication은 인덱스의 처리량(throughput)을 높이는 역할도 한다.
-
sharding이 query parallelization을 해주는 덕분에
검색 쿼리를 여러 샤드에서 동시에 실행할 수 있으며 성능 및 처리량을 향상시킨다. -
sharding을 통해 수많은 데이터를 하나의 인덱스 내 저장 가능하다.
-
sharding은 노드, 클러스터 레벨이 아닌 인덱스 레벨에서 시행되는데
이는 각각의 인덱스가 포함하는 document들의 개수가 다르기 때문이다.