퍼포먼스
-
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..
-
elasticseaarch eager global ordinal를 사용해 퍼포먼스를 올려보자elasticsearch 2021. 2. 20. 13:19
문자열 fielddata의 메모리 사용을 줄이는 기술중 하나가 ordinal이다 cardinality가 작은 status필드 가진 10억개의 문서가 있다고 생각해보자 status_deleted, status_pending, status_published라는 세가지 상태 값이 있고 10억개면 이 전체를 메모리에 유지하기 위해서는 1나당 14 ~ 16 바이트가 필요하며 전체 데이터로는 약 15gb가 필요하다 이처럼 비싼 비용을 들이는 대신 세개의 교유 한 문자열을 식별, 정렬해서 번호를 매긴다 0, 1, 2 이처럼 하게 되면 아래와 같이 메모리 사용량이 15gb에서 1gb미만으로 줄게 된다 문자열 보단 숫자가 용량을 훨씬 더 적게 먹기 때문이고 비교 연산, 네트워크 등등에서 많은 이점을 가지고 갈 수 있게 ..