일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- elasticsearch cache
- request cache
- aqqle
- dbeaver
- JPA
- 테슬라
- vavr
- NORI
- KNN
- java crawler
- redis
- ann
- Selenium
- java
- Analyzer
- Aggregation
- Elasticsearch
- Elastic
- API
- Cache
- IONQ
- file download
- aggs
- mysql
- TSLA
- Docker
- Query
- 양자컴퓨터
- api cache
- 아이온큐
- Today
- Total
아빠는 개발자
[java] API - file system cache (request cache) 본문
API 를 만들고 응답시간을 측정해서 최적의 성능을 만들어 보자
일단 제물이 될 index
820만건의 location-index
일단 aqqle 의 shop API 를 응용해서 후다닥 만들어 보자.
복붙해서 이름만 바꾸니까 1분 미만 컷
지금은 bool > filter > term 쿼리로 조회하니 응답속도가 빠르다.
일단 이 상태에서 리소스 사용과 응답속도를 측정해보잣
캐싱이 안되고 있지만 너무 빠르다
일단 지난 캐시 테스트와 같은 구조로 multi_match 쿼리 와 count집계(aggs) 를 두번 추가
전체쿼리
{
"size":100,
"query":{
"bool":{
"must":[
{
"multi_match":{
"query":"country_code",
"fields":[
"CO^1.0"
],
"type":"best_fields",
"operator":"OR",
"slop":0,
"prefix_length":0,
"max_expansions":50,
"zero_terms_query":"NONE",
"auto_generate_synonyms_phrase_query":true,
"fuzzy_transpositions":true,
"boost":1.0
}
}
],
"adjust_pure_negative":true,
"boost":1.0
}
},
"_source":{
"includes":[
],
"excludes":[
]
},
"aggregations":{
"COUNTRY":{
"terms":{
"field":"country",
"size":10,
"min_doc_count":1,
"shard_min_doc_count":0,
"show_term_doc_count_error":false,
"order":[
{
"_count":"desc"
},
{
"_key":"asc"
}
]
}
},
"CITY":{
"terms":{
"field":"city",
"size":10,
"min_doc_count":1,
"shard_min_doc_count":0,
"show_term_doc_count_error":false,
"order":[
{
"_count":"desc"
},
{
"_key":"asc"
}
]
}
}
}
}
자 이 쿼리로 테스트 해보자.
음.. 대충 이런상태고 그럼 이 상태에서 aggs 에 대한 캐싱처리
API 평균 : 11.22 | API 평균 : 10.96 | API 평균 : 10.55 |
캐싱을 태워도 차이가 크지 않음.. 쿼리가 너무 신사적이여서.. 흉악범같은 쿼리로 다시 테스트
Aggs 에 subAggs 하나씩 추가 하고 캐시 지우고 테스트
API 평균 : 296.29 | API 평균 : 296.79 | API 평균 : 296.28 |
약 290ms 악마같은 쿼리다.. 이제 캐싱처리하고 테스트
API 평균 : 58.62 | API 평균 : 58.26 | API 평균 : 57.9 |
이제야 속도차이가 좀 나는구먼..
다음은 Aggs 와 Query 를 별개로 실행했을때 테스트
case - 검색어인 country_code 가 입력되었을때
- multi_match + aggs쿼리를 실행 해서 aggs에 대한 캐시를 생성
- multi_match 쿼리 실행해서 도큐먼트 검색
이렇게 두번 검색
API 평균 : 64.98 | API 평균 : 65.2 | API 평균 : 64.62 |
https://father-lys.tistory.com/37
위에서 생각해봤던 꼼수가 먹히는 듯 보이는데 좀 더 확인해 봐야겠다.
'Java > API' 카테고리의 다른 글
[java] API Controller에서 데이터를 받아오는 방법 (1) | 2023.10.28 |
---|---|
[java] API - geo distance (0) | 2023.10.21 |
[java] API - 검색 api 성능 개선 final (0) | 2023.10.14 |
[java] API - redis cache for method (0) | 2023.10.13 |
[java] API - redis cache (0) | 2023.10.08 |