정적 매핑 적용하기
방식 | 장점 | 단점 |
동적 매핑 | 미리 매핑 정보를 생성하지 않아도 된다. | 불필요한 필드가 생성될 수 있다. |
정적 매핑 | 필요한 필드만 정의해서 사용할 수 있다. | 미리 매핑 정보를 생성해야 한다. |
동적 매핑을 사용하면 불필요한 매핑 정보가 생성될 수 있으며, 이런 불필요한 매핑 정보는 불필요한 색인 작업을 유발하게 되어 색인 성능을 저하시킬 수 있다. 반대로 정적 매핑을 적용하면 필요한 필드들만 정의 해서 사용할 수 있고 불필요한 매핑 정보를 사용하지 않기 때문에 색인 성능을 향상시킬 수 있다. 특히 문자열 형태의 필드에서 색인 성능차이가 더 크게 발생한다.
문자열 필드는 text와 keyword 타입으로 나눌 수 있는데 그 성격에 따라 분석 방법이 다르기 때문에 성능에도 차이가 있다.
동적매핑
$ curl -X POST "localhost:9200/string_index/_doc?pretty" -H 'Content-Type: application/json' -d'
{
"mytype": "String Data Type"
}
' // 문자열 형태로 자료를 보냄
$ curl -X GET "localhost:9200/string_index/_mapping?pretty"
{
"string_index" : {
"mappings" : {
"_doc" : {
"properties" : {
"mytype" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
...
mytype이라는 문자열 데이터에 text타입과 keyword타입 두가지가 생성되었다. 즉, 문자열 데이터에 대한 동적 매핑 결과는 text타입과 keyword 타입 두가지가 생성되었다. 즉, 문자열 데이터에 대한 동적 매핑 결과는 text타입과 keyword타입 두개의 타입을 만든다는 것을 알 수 있다. 또한 동적 매핑에 의해 생성되는 keyword타입은 ignore_above라는 속성이 하나 더 붙는데 문자열 중 해당 길이 이상인 값은 색인에 포함하지 않는다는 뜻이다. 여기서는 256이상인 문자열이 있다면 257번째 문자부터는 삭제되어 검색에 활용되지 않는다는 뜻이다.
정적매핑
$ curl -X PUT "localhost:9200/keyword_index?pretty" -H 'Content-Type: application/json' -d'
{
"mappings" : {
"_doc" : {
"properties": {
"mytype" : {
"type" : "keyword"
}
...
정적 매핑은 적용할 때는 문서를 색인하기 전에 API를 통해서 문서의 필드와 타입에 대해 먼저 정의하면 된다.
※ 책에서는 정적 매핑을 이용해서 문자열 데이터에 대한 타입을 text, keyword로 미리 매핑정보를 생성했더니 25%의 성능향상이 있었다고한다.
Refresh_interval 변경하기
ES는 색인되는 문서들을 메모리 버퍼 캐시에 먼저 저장한 후 특정 조건이 되면 메모리 버퍼 캐시에 저장된 색인 정보나 문서들을 디스크에 세그먼트 단위로 저장한다. 색인된 문서는 이렇게 세그먼트 단위로 저장되어야 검색이 가능해지며 이런 일련의 작업들을 refresh라고 한다. 이 refresh를 얼마나 주기적으로 할 것이지 결정하는 값이 refresh_interval이다.
refresh_interval의 기본값은 1초이다. ES가 '준 실시간 검색 엔진'이라 불리는 것은 이 refresh_interval이 1초로 설정되어 있어 문서가 색인되고 1초 후에 검색이 가능하기 때문이다.
refresh 작업은 I/O를 발생시키기 때문에 성능을 저하시킬 수 있다. 그렇다고 해서 I/O발생을 늦추기 위해 refresh 작업의 주기를 너무 길게 설정하면 색인된 문서를 검색할 수 없어서 ES 본연의 기능에 문제가 생길 수 있다. 적용하는 서비스에 맞추어 설정하자
$ curl -X GET "localhost:9200/refresh_index/_settings?pretty"
'PaaS > Data' 카테고리의 다른 글
Oracle의 Segment Advisor 사용하기 (0) | 2022.08.09 |
---|---|
ElasticSearch-Filebeat 인덱스 이름 Custom하게 변경 (0) | 2022.08.08 |
ElasticSearch 운영하기 (0) | 2022.07.24 |
ElasticSearch 클러스터 튜닝 가이드 (0) | 2022.07.22 |
ElasticSearch 기본 개념 (0) | 2022.07.21 |