쿼리 캐싱 사용하기

쿼리 캐싱 사용하기

Druid 서비스가 쿼리 캐시를 채우고(populate) 사용하도록 구성하는 방법을 설명해요. useCache와 populateCache 파라미터의 역할과 서비스별 캐시 활성화 방법을 다뤄요.

출처: 문서

본문

이 주제는 Druid 쿼리 캐시를 채우고 사용하도록 서비스를 구성하는 방법을 다뤄요. 개념적 개요와 사용 사례에 대해서는 Query caching 문서를, 캐싱 메커니즘 구성 방법은 Cache configuration 문서를 참고해요.

모든 쿼리 캐시에는 개별 쿼리가 캐시와 상호작용하는 방식을 제어하는 파라미터 한 쌍이 있어요:

  • useCache 는 쿼리가 결과를 위해 캐시를 사용하도록 지시해요.
  • populateCache 는 쿼리가 자신의 결과를 캐시하도록 지시해요.

사용(usage)과 채움(population)이라는 관심사를 분리하면, 다른 쿼리가 재사용할 가능성이 낮은 결과(예: 대형 리포트나 매우 오래된 데이터에 대한 쿼리)로 캐시를 오염시키지 않으면서, 드문 데이터에 대한 쿼리의 캐시된 결과를 포함할 수 있어요.

캐싱을 사용하려면 서비스가 캐싱을 수행하도록 서비스의 runtime properties 설정에서 활성화해야 해요. 기본적으로 per-segment 캐시는 Historical에서 활성화돼 있어요. 개별 쿼리에 대해서는 query context 내에서 캐시 사용과 채움을 제어할 수 있어요.

Historical에서 쿼리 캐싱 활성화

Historical은 기본적으로 활성화된 segment-level 캐싱만 지원해요. Historical에서 캐싱을 제어하려면 useCache 와 populateCache runtime properties를 설정해요. 예를 들어, Historical이 쿼리에 대해 segment 캐시를 사용하고 채우도록 설정하려면:

druid.historical.cache.useCache=truedruid.historical.cache.populateCache=true

사용 가능한 모든 Historical 캐시 구성에 대한 설명은 Historical caching 문서를 참고해요.

task executor 서비스에서 쿼리 캐싱 활성화

task executor 서비스인 Peon 또는 Indexer는 segment-level 캐싱만 지원해요. task executor 서비스에서 캐싱을 제어하려면 useCache 와 populateCache runtime properties를 설정해요. 예를 들어, Peon이 쿼리에 대해 segment 캐시를 사용하고 채우도록 설정하려면:

druid.realtime.cache.useCache=truedruid.realtime.cache.populateCache=true

사용 가능한 모든 task executor 서비스 캐싱 옵션에 대한 설명은 Peon caching 과 Indexer caching 문서를 참고해요.

Broker에서 쿼리 캐싱 활성화

Broker는 세그먼트 레벨 캐싱과 전체 쿼리 결과 레벨 캐싱을 모두 지원해요.

Broker에서 segment 캐싱을 제어하려면 useCache 와 populateCache runtime properties를 설정해요. 예를 들어, Broker가 쿼리에 대해 segment 캐시를 사용하고 채우도록 설정하려면:

druid.broker.cache.useCache=truedruid.broker.cache.populateCache=true

Broker에서 전체 쿼리 캐싱을 제어하려면 useResultLevelCache 와 populateResultLevelCache runtime properties를 설정해요. 예를 들어, Broker가 쿼리에 대해 전체 쿼리 캐시를 사용하고 채우도록 설정하려면:

druid.broker.cache.useResultLevelCache=truedruid.broker.cache.populateResultLevelCache=true

사용 가능한 모든 Broker 캐시 구성에 대한 설명은 Broker caching 문서를 참고해요.

query context에서 캐싱 활성화

서비스가 캐시를 채우도록 설정된 상태라면, query context 에서 개별 쿼리에 대한 캐시 옵션을 설정할 수 있어요. 예를 들어, Druid SQL API에 POST 요청을 보내고 context를 JSON 객체로 포함할 수 있어요:

{  "query" : "SELECT COUNT(*) FROM data_source WHERE foo = 'bar' AND __time > TIMESTAMP '2020-01-01 00:00:00'",  "context" : {    "useCache" : "true",    "populateCache" : "false"  }}

이 예시에서 사용자는 1년이 지난 segment 결과로 결과 캐시를 채우지 않기 위해 populateCache 를 false 로 설정했어요. 자세한 내용은 Druid SQL client APIs 문서를 참고해요.

또한 SQL 쿼리 문자열 안에서 직접 SET 명령을 사용해 캐시 옵션을 지정할 수도 있어요. 자세한 내용은 SET 문서를 참고해요.

더 알아보기 (Learn more)