본문 바로가기

Data Base/NoSQL

Elasticsearch 퍼포먼스 튜닝 방법 - 인덱스 디자인 측면에서

Elasticsearch 퍼포먼스 튜닝 방법

Apach 루씬을 기반으로 한 검색, 분선엔진인 Elasticsearch는 데이터를 실시간에 가깝게 보여주고 분석해준다. Real-Time 형태의 분석과 검색을 위해 퍼포먼스를 튜닝하려면, 많은 처리량, 낮은 검색 지연시간을 요구한다.

 

효율적인 인덱스 디자인

1. 인덱스를 설계할 때

  • 하나의 인덱스에 모든 데이터를 넣고 쿼리로 찾을 것인지
  • 여러 인덱스로 나눌 것인지

쿼리에 filter가 들어가고 그 값이 Enumerable 할 때는 인덱스를 나눠서 설계해야 한다. 

기간이 정해져 있는 데이터의 경우, 기간별로 인덱스를 구성하여 사용하면 좋다. 일, 주, 월별 데이터를 모을 수 있기 때문에 날짜별로 데이터를 모으면 더 빠르게 데이터에 접근할 수 있다. 

 

2. ID 부여할 때

ID는 엘라스틱 서치에서 자동으로 생성되는 ID를 사용하는 것이 좋다. 이는 고유값을 보증하기 때문이다. 사용자 고유 ID를 진행하고 싶은 경우 루씬에 친화적인 UUID-1 또는 Nono Time을 사용해야 한다. 이 아이디들은 일관되고 연속적인 패턴이 잘 압축되어 있는 형식들이다.

 

3. 자동 매핑 방지

기본적으로 데이터가 인덱스에 들어가면 자동 매핑을 해주지만 효율적이지는 않다. 효율적인 인덱스를 설계하고, dynamic 옵션을 false로 지정하여 자동 매핑을 방지해주는 게 좋다.

 

검색을 진행하는 경우 stop word를 사용한 검색은 자제하는 것이 좋다. 엘라스틱 서치는 모든 결과를 score별로 정렬하기 때문에 'the fox'와 같은 stop word 대신 'the' AND 'fox'와 같이 stop word를 만드는 것이 좋다. 더 좋은 방법은 미리 token filter를 만들어서, stop word를 제거하고 검색되게 만드는 것이다.

 

 

어떤 데이터 베이스를 활용하던지 가장 중요한 것은 1차적인 설계와 사용에서 끝나는 것이 아닌, 시스템의 개발에 따라 퍼포먼스 튜닝 관점을 계속 고려해야 한다는 점이다.

'Data Base > NoSQL' 카테고리의 다른 글

Elasticsearch 기본  (0) 2024.05.15
하둡 에코 시스템의 기본  (0) 2024.05.01