전체 글
-
elasticsearch search type query then fetch and dfselasticsearch 2021. 3. 25. 21:51
GET test/_search?search_type=dfs_query_then_fetch { "query": { "match_phrase_prefix": { "title": { "query": "d", "max_expansions": 5 } } } } 응답 결과 "_score" : 1.0, "_source" : {"title":"drunk"} "_score" : 0.30685282, "_source" : {"title":"dzone"} "_score" : 0.30685282, "_source" : {"title":"data"} "_score" : 0.30685282, "_source" : {"title":"drive"} 왜 "drunk"라는 값을 포함하는 문서의 스코어만 1.0이고 그 외에는 0.3일까?..
-
elasticsearch close apielasticsearch 2021. 3. 24. 21:31
POST /my-index-000001/_close 인덱스를 닫는다는 말은 인덱스를 사용하지 않겠다라는 말과 같다 그렇기 때문에 읽기와 쓰기(색인)과 같은 작업은 할 수 없게 되고 검색을 할 수 없기 때문에 내부 데이터 구조를 유지할 필요도 없으므로 메모리 소모와 클러스터 오버헤드가 줄어든다 그래서 사용하지 않을 인덱스는 삭제 혹은 close 상태로 두어 유지하다 제거해야 한다 open/close 된 인덱스의 데이터는 충분한 샤드 복사본을 통해 안전하게 보관되도록 클러스터에 자동 복제된다 alias에서 걸려있는 index중 하나라도 close index가 되있는 상태에서 검색시 에러가 발생한다 alias 걸려 있는 인덱스를 close가 되어 잠시동안 장애가 있었다 물론 같은 동작은 하는 2개의 배치가(1..
-
elasticsearch segments 병합 전략과 스케줄링elasticsearch 2021. 3. 23. 23:20
세그먼트 병합 전략과 스케줄링 세그먼트의 병합은 성능 향상에 매우 중요하므로 병합 정책이 존재하는데 방식이 2가지가 있다 LogMergePolicy와 tieredMergePolicy 총 두 가징이다 LogMergeerPolicy 용량이 급증하는 세그먼트 병합 방법 중 Merge Factor 기반으로 하는 병합 정책이다. Merge Factor(이하 mf)는 일종의 세그먼트 병합 기준 수치라고 할 수 있는데 세그먼트는 mf로 설정된 수보다 작은 수의 세그먼트를 가지며 이 수를 넘어서게 되면 병합이 발생하게 된다 mf가 자주 발생하면 검색 속도는 향상이 되겠지만 색인에는 많은 시간과 자원이 발생하게 된다 반대로 너무 길면 검색 속도는 느려지고 색인 시에 비용은 줄어들게 된다 mf의 기본 값은 10이고 다시 ..
-
elasticsearch segments 1부elasticsearch 2021. 3. 20. 14:17
세그먼트란? 루씬의 색인은 물리적 세그먼트로 구성되어 있으며 세그먼트를 간당히 정의하면 색인된 도큐먼트 모음이다 세그먼트는 독특한 색인 구조가 성능과 직결되기 때문에 상당히 중요하므로 잘 살펴볼 필요가 있다 세그먼트는 RAM과 DISK에 저장된다 색인 안에는 수많은 세그먼트가 있고 세그먼트 안에는 수많은 도큐먼트가 있다 lucene.apache.org/core/6_4_0/core/org/apache/lucene/codecs/lucene62/package-summary.html#package.description 세그먼트의 구성 하나의 세그먼트는 여러 개의 파일로 구성된다 세그먼트에는 도큐먼트 필드 뿐만아니라 효과적인 검색에 필요한 다양한 정보가 담겨있다 위 그림은 세그먼트로 구성된 색인인데 팡일 이름에 ..
-
elasticsearch translog 튜닝 with asyncelasticsearch 2021. 3. 16. 21:33
왜 필요할까? 트랜스 로그가 왜 필요한지 기본적인 설명은 전에 설명하였지만 간단하게 설명하면 장애 복구이다 요청 들어온 것을 translog에 기록하여 디스크에 동기화 되었을 때만 해당 데이터를 삭제하는 사이클을 가지고 있다 더 궁금하다면 https://ksk-developer.tistory.com/28 에 들어가서 확인 바란다 오늘은 색인시 더 빨리 색인할 수 있는 간단한 팁을 설명하겠다 index.translog.durability index.translog.durability이라는 옵션은 기본 값이 request인데 translog도 파일에 건건이 I/O 작업을 하게 된다 실제로 색인, 삭제, 업데이트 벌크 요청등등 매 요청마다 translog에 들어가게 된다 건건이 들어가는 이유는 장애 복구 때문..
-
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 2021. 3. 3. 22:10
컬럼 기반 저장소에 대해서 알지 못했는데 es에서 field_datta, doc_value에 대해서 알아보다 컬럼 기반 저장소를 사용한다고 해서 찾아보고 정리, 번역하였다 rdbms 저장구조 행 기반 database에서 행 값은 대게 연속적으로 저장된다 행 헤더는 레코드 길이, null bit 등등 포함하고 있다 좀 더 디테일하게 보면 테이블 데이터 파일을 봤을 때 아래와 같이 이루어져 있다 실제 행 값은 값 구조의 특정 오프셋을 저장한다 오프셋은 컬럼 타입에 의존한다 특정 행를 읽기 위해 그 첫번째 위치를 알아야 하는데 행에 존재하는 필드들이 고정 길이를 가지고 있으면 이것은 매우 쉽다 그러나 아래 이미지와 같이 varchar와 같은 가변적인 길이라면 쉽지 않다 고정적인 길이가 아닌 가변적인 길이 때문..