일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- vavr
- Selenium
- dbeaver
- KNN
- API
- java
- Elasticsearch
- IONQ
- Query
- NORI
- redis
- Elastic
- ann
- Cache
- api cache
- Analyzer
- TSLA
- elasticsearch cache
- Aggregation
- aggs
- file download
- java crawler
- Docker
- mysql
- JPA
- request cache
- 양자컴퓨터
- aqqle
- 테슬라
- 아이온큐
Archives
- Today
- Total
아빠는 개발자
[es] aggs 테스트 (단일필드, object 필드, object.object 필드) 본문
Elastic/elasticsearch
[es] aggs 테스트 (단일필드, object 필드, object.object 필드)
father6019 2024. 8. 24. 18:40728x90
반응형
Aggregation 의 성능을 높이고 싶을때 시도해 보면 좋은 방법이 될꺼 같은데.. 아무튼 테스트를 해보자
일단 인덱스의 맵핑 구조는 아래와 같다.
포인트는
"city": "Michigan",
"country_code": "US",
"country": "America/Detroit",
3개의 정보가 단일필드, place 하위의 object, 그리고 그 obejct 하위의 object 로 3가지 색인후 집계 테스트를 진행해 본다.
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"dynamic": "true",
"_source": {
"enabled": "true"
},
"properties": {
"private_ip": {
"type": "ip"
},
"public_ip": {
"type": "ip"
},
"country_code": {
"type": "keyword"
},
"city": {
"type": "keyword"
},
"addr1": {
"type": "keyword"
},
"location": {
"type": "geo_point"
},
"no": {
"type": "keyword"
},
"country": {
"type": "keyword"
},
"num": {
"type": "long"
},
"timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"place": {
"type": "object",
"properties": {
"city": {
"type": "keyword"
},
"country_code": {
"type": "keyword"
},
"country": {
"type": "keyword"
},
"place_location": {
"type": "object",
"properties": {
"pl_city": {
"type": "keyword"
},
"pl_country_code": {
"type": "keyword"
},
"pl_country": {
"type": "keyword"
}
}
}
}
}
}
}
}
이렇게 index를 생성하고
location 정보 약 820 만 건을 색인한다.
색인된 데이터의 구조는 다음과 같다.
그리고 검색을 위한 테스트 쿼리 와 결과값
"aggregations": { "CITY": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 5413640, "buckets": [ { "key": "California", "doc_count": 555870 }, { "key": "New York", "doc_count": 440142 }, { "key": "Texas", "doc_count": 423060 }, { "key": "Virginia", "doc_count": 282806 }, { "key": "Illinois", "doc_count": 253158 }, { "key": "Ohio", "doc_count": 177665 }, { "key": "Florida", "doc_count": 176873 }, { "key": "Lombardy", "doc_count": 174612 }, { "key": "Gyeonggi-do", "doc_count": 174488 }, { "key": "New Jersey", "doc_count": 169874 } ] }, "COUNTRY": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 2185802, "buckets": [ { "key": "America/New_York", "doc_count": 1904632 }, { "key": "America/Chicago", "doc_count": 1077460 }, { "key": "America/Los_Angeles", "doc_count": 647753 }, { "key": "Europe/Rome", "doc_count": 580266 }, { "key": "Europe/Berlin", "doc_count": 384289 }, { "key": "Europe/Paris", "doc_count": 341172 }, { "key": "Europe/Amsterdam", "doc_count": 337171 }, { "key": "Europe/London", "doc_count": 308768 }, { "key": "Asia/Seoul", "doc_count": 295446 }, { "key": "Europe/Vienna", "doc_count": 179429 } ] }, "COUNTRY_CODE": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 1539549, "buckets": [ { "key": "US", "doc_count": 3985288 }, { "key": "IT", "doc_count": 580270 }, { "key": "DE", "doc_count": 384292 }, { "key": "FR", "doc_count": 341339 }, { "key": "NL", "doc_count": 337171 }, { "key": "GB", "doc_count": 309076 }, { "key": "KR", "doc_count": 295445 }, { "key": "AT", "doc_count": 179433 }, { "key": "PL", "doc_count": 150649 }, { "key": "JP", "doc_count": 139676 } ] } |
"aggregations": { "CITY": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 5413640, "buckets": [ { "key": "California", "doc_count": 555870 }, { "key": "New York", "doc_count": 440142 }, { "key": "Texas", "doc_count": 423060 }, { "key": "Virginia", "doc_count": 282806 }, { "key": "Illinois", "doc_count": 253158 }, { "key": "Ohio", "doc_count": 177665 }, { "key": "Florida", "doc_count": 176873 }, { "key": "Lombardy", "doc_count": 174612 }, { "key": "Gyeonggi-do", "doc_count": 174488 }, { "key": "New Jersey", "doc_count": 169874 } ] }, "COUNTRY": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 2185802, "buckets": [ { "key": "America/New_York", "doc_count": 1904632 }, { "key": "America/Chicago", "doc_count": 1077460 }, { "key": "America/Los_Angeles", "doc_count": 647753 }, { "key": "Europe/Rome", "doc_count": 580266 }, { "key": "Europe/Berlin", "doc_count": 384289 }, { "key": "Europe/Paris", "doc_count": 341172 }, { "key": "Europe/Amsterdam", "doc_count": 337171 }, { "key": "Europe/London", "doc_count": 308768 }, { "key": "Asia/Seoul", "doc_count": 295446 }, { "key": "Europe/Vienna", "doc_count": 179429 } ] }, "COUNTRY_CODE": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 1539549, "buckets": [ { "key": "US", "doc_count": 3985288 }, { "key": "IT", "doc_count": 580270 }, { "key": "DE", "doc_count": 384292 }, { "key": "FR", "doc_count": 341339 }, { "key": "NL", "doc_count": 337171 }, { "key": "GB", "doc_count": 309076 }, { "key": "KR", "doc_count": 295445 }, { "key": "AT", "doc_count": 179433 }, { "key": "PL", "doc_count": 150649 }, { "key": "JP", "doc_count": 139676 } ] } |
"aggregations": { "CITY": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 5413640, "buckets": [ { "key": "California", "doc_count": 555870 }, { "key": "New York", "doc_count": 440142 }, { "key": "Texas", "doc_count": 423060 }, { "key": "Virginia", "doc_count": 282806 }, { "key": "Illinois", "doc_count": 253158 }, { "key": "Ohio", "doc_count": 177665 }, { "key": "Florida", "doc_count": 176873 }, { "key": "Lombardy", "doc_count": 174612 }, { "key": "Gyeonggi-do", "doc_count": 174488 }, { "key": "New Jersey", "doc_count": 169874 } ] }, "COUNTRY": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 2185802, "buckets": [ { "key": "America/New_York", "doc_count": 1904632 }, { "key": "America/Chicago", "doc_count": 1077460 }, { "key": "America/Los_Angeles", "doc_count": 647753 }, { "key": "Europe/Rome", "doc_count": 580266 }, { "key": "Europe/Berlin", "doc_count": 384289 }, { "key": "Europe/Paris", "doc_count": 341172 }, { "key": "Europe/Amsterdam", "doc_count": 337171 }, { "key": "Europe/London", "doc_count": 308768 }, { "key": "Asia/Seoul", "doc_count": 295446 }, { "key": "Europe/Vienna", "doc_count": 179429 } ] }, "COUNTRY_CODE": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 1539549, "buckets": [ { "key": "US", "doc_count": 3985288 }, { "key": "IT", "doc_count": 580270 }, { "key": "DE", "doc_count": 384292 }, { "key": "FR", "doc_count": 341339 }, { "key": "NL", "doc_count": 337171 }, { "key": "GB", "doc_count": 309076 }, { "key": "KR", "doc_count": 295445 }, { "key": "AT", "doc_count": 179433 }, { "key": "PL", "doc_count": 150649 }, { "key": "JP", "doc_count": 139676 } ] } |
비교 및 최적화
성능 측면에서
- 평면화된 구조는 일반적으로 성능이 더 우수합니다. 데이터 접근이 간단하고, 복잡한 nested 쿼리를 사용하지 않기 때문에 더 빠른 검색과 집계가 가능합니다.
- nested 구조는 관계형 데이터를 정확하게 표현할 수 있지만, 쿼리와 집계 성능이 저하될 수 있습니다. 특히 대량의 nested 문서가 있는 경우 성능 저하가 두드러질 수 있습니다.
최적화 방법
- 필드 사용 최적화: 필요한 필드만 포함하여 인덱스를 최적화합니다.
- nested 쿼리 최적화: nested 쿼리를 사용할 때는 필드 접근을 최소화하고, 효율적인 쿼리와 집계를 작성합니다.
- 캐싱: 자주 사용하는 쿼리와 집계 결과를 캐시하여 성능을 개선할 수 있습니다.
- 하드웨어 및 클러스터 설정: 하드웨어 자원과 클러스터 설정을 조정하여 성능을 개선할 수 있습니다.
결론
- 평면화된 구조는 성능이 더 우수하고, 데이터 접근이 단순하여 일반적으로 더 좋은 선택입니다.
- nested 구조는 복잡한 관계를 표현할 때 유용하지만, 성능이 저하될 수 있으며, 대규모 데이터셋에서는 성능 최적화가 필요합니다.
구조를 변경할 때는 데이터의 복잡성, 쿼리 요구 사항, 성능 요구 사항을 고려하여 최적의 선택을 해야 합니다.
728x90
반응형
'Elastic > elasticsearch' 카테고리의 다른 글
[es] Shard 구성 변경과 Data node (0) | 2024.08.18 |
---|---|
[es] 샤드 구성 변경 테스트 (0) | 2024.08.11 |
[es] data node cpu 안정화 (1) | 2024.08.04 |
[es] Elasticsearch data node 의 shard 정보 (0) | 2024.08.01 |
[es] data node cpu 튀는 현상 (0) | 2024.08.01 |