본문 바로가기

728x90
728x90

DevOps/Elastic Stack

[Elasticsearch] Cardinality 집계, 유니크한 값의 수 - 컴도리돌이 SQL에서 데이터를 집계할 때, GROUP BY 구문을 자주 사용하여 특정 필드에 대해 유니크한 값의 수나 그룹별 집계를 수행합니다. 예를 들어, 특정 칼럼의 유니크한 값을 계산하거나, 고유한 사용자 수를 구하는 등의 작업을 쉽게 처리할 수 있습니다. 하지만 Elasticsearch에서 이러한 작업을 어떻게 처리할까요? Elasticsearch는 분산형 시스템으로, 데이터를 빠르게 검색하고 집계할 수 있는 강력한 기능을 제공하지만, SQL과는 다른 방식으로 데이터를 처리합니다.  Elasticsearch에서 Cardinality 집계는 특정 필드의 유니크한 값의 수를 계산하는 집계 방식입니다. 예를 들어, 사용자가 방문한 사이트의 고유한 페이지 수를 계산하거나, 상품의 고유한 카테고리 수를 구하는 등 유.. 더보기
[Elasticsearch] Elasticsearch Highlight를 활용한 필드 매칭 이해하기 - 컴도리돌이(feat. java) - 컴도리돌이 Elasticsearch를 사용하다 보면, 하나의 키워드를 여러 필드에 매칭하여 검색해야 하는 경우가 있습니다. 보통 fields를 사용하여 여러 필드를 배열에 넣고, query 값에 검색어를 입력해 조회하곤 하죠. 예를 들어 아래와 같은 쿼리를 사용해 보신 적 있을 겁니다:{ "query": { "bool": { "must": [ { "multi_match": { "query": "경기도 성남시 분당구", "fields": ["addr", "jibun", "road"] } } ] } }} 이 쿼리는 지정된 필드들 중에서 키워드와 매칭되는 데이터를 찾아줍니다. 그런데 여기서 궁.. 더보기
[Elasticsearch] Elasticsearch 집계하기, 버킷 집계(Bucket Aggregation)과 메트릭 집계(Metric Aggregation) (Feat. Java) - 컴도리돌이 DB에서 집계를 처리할 때, SQL에서는 GROUP BY문을 사용해 데이터를 그룹화하고, 각 그룹에 대해 집계 함수 (COUNT, AVG, SUM 등)을 적용합니다. 이는 매우 직관적이고 유용하지만, 대용량 데이터에서 효율적인 집계를 위한 최적화가 필요한 경우가 많습니다. 그렇다면 Elasticsearch에서는 어떻게 집계를 할까요? 🤔 Elasticsearch는 검색 엔진이라 SQL처럼 전통적인 관계형 데이터베이스 방식의 집계 방식이 아닌, 분산 검색 시스템 특성을 반영한 집계 방식을 제공합니다.  Elasticsearch의 집계는 데이터를 분석하고 요약하는 데 필요한 기능을 제공합니다. 이는 SQL의 GROUP BY와 유사하지만, Elasticsearch에서는 더 많은 기능과 유연성을 제공하여 대규.. 더보기
[Elasticsearch] 성능 향상을 위한 doc_values 사용법: 메모리 효율 향상시키기 - 컴도리돌이 작심삼주 오블완 챌린지오늘 블로그 완료! 21일 동안 매일 블로그에 글 쓰고 글력을 키워보세요.www.tistory.comElasticsearch에서 성능을 최적화하는 것은 데이터 양이 많을수록 더욱 중요합니다. 보통 검색 속도에 집중하게 되지만, 메모리 사용 최적화 역시 시스템 성능에 큰 영향을 미쳐요. 이때 doc_values라는 기능이 등장하죠! 이 기능을 통해 메모리 사용을 절감하면서도 빠른 응답 속도를 확보할 수 있습니다. 😊근데 doc_values가 뭔데? 🤔doc_values는 필드 데이터를 메모리가 아닌 디스크에 저장하여 필요한 순간에만 참조할 수 있게 해주는 Elasticsearch의 기능입니다. 메모리 대신 디스크를 활용해 대량의 데이터를 효율적으로 다루게 하죠. 이를 통해 JVM 힙 .. 더보기
[Elasticsearch] 성능 개선을 위한 코드 비교 및 분석 - 컴도리돌이 작심삼주 오블완 챌린지오늘 블로그 완료! 21일 동안 매일 블로그에 글 쓰고 글력을 키워보세요.www.tistory.comElasticsearch로 데이터 검색 속도를 높이는 일은 단순히 쿼리 작성만의 문제가 아니었어요. 때로는 작은 설정 하나하나 코드 스타일이 성능 차이를 만들기도 합니다.불필요한 필드 설정 피하기먼저, 많은 분들이 텍스트 데이터를 다룰 때 대부분의 필드를 text로 지정하는 실수를 합니다. 🤔 텍스트 필드가 많으면 리소스를 불필요하게 잡아먹습니다. 아래처럼 너무 많은 필드를 text로 설정하면 검색 속도가 느려질 수밖에 없어요. // 잘못된 인덱스 설정 예시 { "mappings": { "properties": { "title": { "type": "text" }, "content":.. 더보기
[Elasticsearch] wildcard 쿼리에 대해 제대로 이해하기 - 컴도리돌이 RDBMS를 사용하다가 Elasticsearch에서 쿼리를 작성하면서 wildcard를 사용한 쿼리의 결과가 제가 생각했던 것과 달라서, 해당 내용에 대해 충분히 이해하기 위해 글을 작성하려고 합니다. Wildcard query를 작성하면서 예상했던 결과는 RDBMS의 LIKE에서 사용했던 '%searchInput%'와 같은 형태가 가능할 것으로 기대했는데, 막상 확인되는 결과는 그렇지 않았습니다. 원본 텍스트는 "경기도 용인시 기흥구 중동 1100번지"와 같은 형태의 주소입니다. 제가 시도한 쿼리는 다음과 같았습니다.{ "query": { "bool": { "must": [ { "wildcard": { "address": { "value": "*경기도 기흥구*" } } } ] } } } 그런데 결과는 .. 더보기
[ELK] 인덱스(생성/조회/삭제)와 도큐먼트(CRUD)에 대해서 - 컴도리돌이 Elasticsearch 인덱스는 일반적인 관계형 데이터베이스와 성격이 다릅니다. 인덱스는 도큐먼트를 저장하는 논리적 구분자이며, 도큐먼트는 실제 데이터를 저장하는 단위입니다. 도큐먼트는 엘라스틱서치에서 데이터가 저장되는 기본 단위로 JSON 형태이며, 하나의 도큐먼트는 여러 필드와 값을 갖고 있습니다. 이번 포스팅에서는 엘라스틱 서치가 도큐먼트에 데이터를 어떻게 저장하는지 알아볼려고 합니다. 인덱스(index) 인덱스는 도큐먼트를 저장하는 논리적 단위로, 관계형 데이터 베이스의 테이블과 유사한 개념입니다. 하나의 인덱스에 다수의 도큐먼트가 포함되는 구조이며, 동일한 인덱스에 있는 도큐먼트는 동일한 스키마를 가질 수 있습니다. 그리고 모든 도큐먼트는 반드시 하나의 인덱스에 포함돼야 합니다. 인덱스 이름에.. 더보기
[Elasticsearch] 엘라스틱 서치 역인덱스(Elasticsearch inverted index) - 컴도리돌이 이번 글에서는 엘라스틱서치(Elasticsearch)에서 데이터를 어떤 방식으로 저장하는지 알아보겠습니다.오늘 글의 주제는 역인덱스(inverted index) 구조에 대해서 알아보겠습니다.  일반적인 RDBMS에서 텍스트 형식으로 이루어진 컬럼에서, 특정 단어가 포함되어 있는지 확인하기 위해서는 다음과 같이 패턴을 검색할 수 있습니다.  SELECT *FROM test_tableWHERE test_columns LIKE '%quokka%' 보통 와일드카드 '%'를 이용하여 특정 단어로 시작한, 끝 맺히는, 포함되어 있는 데이터를 조회할 때, LIKE 연산과 '%'을 사용하여 패턴 검색을 할 것입니다.  1. the cute white quokka2. the cute brown quokka3. the c.. 더보기