아빠는 개발자

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

Java/API

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

father6019 2023. 10. 7. 20:59
728x90
반응형

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 가 입력되었을때

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

이렇게 두번 검색

API 평균 : 64.98 API 평균 : 65.2 API 평균 : 64.62

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

 

[es] file system cache 를 이용한..

file system cache 를 이용한.. 꼼수를 부려보자 기존쿼리 + AGGS 를 사용하는데 file system cache 를 이용할 수 가 없다. 왜냐..면 size 가 0이 될 수 없는 상황.. 그래서 AGGS size 0을 먼저 실행하고 그다음 검색

father-lys.tistory.com

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

728x90
반응형