es
-
Elasticssearch BulkProcessor를 사용하자elasticsearch 2021. 3. 13. 00:24
cdc(change data capture) api를 구축해서 사용하고 있었다 webflux를 사용했고 클라이언트에서도 데이터 셋은 최대한 중복처리 해서 보내주지만 요청 당 es로 bulk 하는 방식이었다. 즉 client에서 1,2,3,4~n의 변경된 테이블 기본키를 몇 초 정도 수집하고 데이터를 전송하는데 많을 때는 백건 이상도 있지만 적을 땐 몇 건 밖에 없을 때도 많았다 그래서 es로 전송하는 요청 수도 상당히 많아지고 요청 오는 즉시 색인(대부분 수정)을 하니 잦은 요청으로 인한 세그먼트 삭제와 추가가 발생하였고 그로 인해 잦은 머지로 퍼포먼스 문제가 있어서 bulk processor를 도입하기로 하였다. 기본적으로 es에서는 bulk요청 시 바로 요청을 해주는 것도 있지만 restHighLev..
-
elasticsearch(with lucene) force-merge에 대해서elasticsearch 2021. 3. 7. 11:51
merging하는 것은 그들 함께 merging함으로써 각 샤드의 세그먼스 수를 줄인다 또한 문서를 삭제함으로써 공간을 줄일 수도 있고 압축률 또한 좋아지고 중복된 데이터를 줄일 수도 있으며 세그먼트 수도 줄어들기 때문에 인덱스에 대한 검색, 집계와 정렬 할 때 좋다 보통 merging은 자동적으로 일어나게 되지만 때로는 merge 기능을 호출하여 유용하게 사용할 수도 있다 주의 할점은 force-merge(이하 fm)는 쓰기를 하지 않는 인덱스에만 적용해야 한다 지금은 수정 입력 삭제가 없더라도 미래에 생긴다면 주기적인 fm은 하지 않아야 한다 대신 백그라운드 merge 정책에 의존하면 된다 fm을 수행하고, 수행하면서 계속 쓰기 작업을 한다면 성능이 안좋아질 것이다 검색하다보니 두가이 이유가 있는데 ..
-
elasticsearch(with lucene) field_data에 대해서 알아보자elasticsearch 2021. 2. 9. 11:04
예전에 무신사 es 서비스 성능 튜닝을 하기 위해 여러가지 점검을 하였는데 그 중 fielddata, doc_value, eager_global_ordinals에 정리해보려고 한다 doc_value와 eager_global_ordinals은 다음에 작성할 예정이며 오늘은 field_data에 정리해보려고 한다 루씬을 내부적으로 데이터를 역색인하여 저장하고 특정 query에 대해 관련 있는 문서를 얻기 위해서 만들어졌다 그런데 단순 질의뿐만 아니라 집계나 필드 기준으로 정렬하는 것에 대한 요구사항이 있었고 이런 요구사항을 해결하기위해 루씬은 역색인 된 데이터를 univerted하여 컬럼 중심 뷰를 만들게되었다 검색시점이나, close한 인덱스를 다시 open 하거나 할 때 등등 univerted(이것 또한..