반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

[java] API - file system cache (request cache) 본문

JAVA/springboot

[java] API - file system cache (request cache)

닉의네임 2023. 10. 9. 00:19
반응형

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 에 대한 캐싱처리 

캐싱을 태워도 차이가 크지 않음..  쿼리가 너무 신사적이여서.. 흉악범같은 쿼리로 다시 테스트 

Aggs 에 subAggs 하나씩 추가 하고 캐시 지우고 테스트 

약 290ms 악마같은 쿼리다.. 이제 캐싱처리하고 테스트 

이제야 속도차이가 좀 나는구먼..

다음은 Aggs 와 Query 를 별개로 실행했을때 테스트 

 

 

case - 검색어인 country_code 가 입력되었을때

  1. multi_match + aggs쿼리를 실행 해서 aggs에 대한 캐시를 생성
  2. multi_match 쿼리 실행해서 도큐먼트 검색   

이렇게 두번 검색

 

https://father-lys.tistory.com/37

위에서 생각해봤던 꼼수가 먹히는 듯 보이는데 좀 더 확인해 봐야겠다.

반응형

'JAVA > springboot' 카테고리의 다른 글

[java] API - cache method  (0) 2023.10.15
[java] API - redis cache  (2) 2023.10.09
[springboot] springboot kafka 연동하기  (0) 2022.10.22
[springboot] 엑셀  (0) 2022.02.21
[springboot] 프로젝트 생성 - intelliJ IDEA  (0) 2022.01.18
Comments