"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1807],{15680:(e,r,n)=>{n.d(r,{xA:()=>u,yg:()=>y});var t=n(96540);function a(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?i(Object(n),!0).forEach((function(r){a(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function o(e,r){if(null==e)return{};var n,t,a=function(e,r){if(null==e)return{};var n,t,a={},i=Object.keys(e);for(t=0;t<i.length;t++)n=i[t],r.indexOf(n)>=0||(a[n]=e[n]);return a}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t<i.length;t++)n=i[t],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=t.createContext({}),l=function(e){var r=t.useContext(c),n=r;return e&&(n="function"==typeof e?e(r):s(s({},r),e)),n},u=function(e){var r=l(e.components);return t.createElement(c.Provider,{value:r},e.children)},g="mdxType",h={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},p=t.forwardRef((function(e,r){var n=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),g=l(n),p=a,y=g["".concat(c,".").concat(p)]||g[p]||h[p]||i;return n?t.createElement(y,s(s({ref:r},u),{},{components:n})):t.createElement(y,s({ref:r},u))}));function y(e,r){var n=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var i=n.length,s=new Array(i);s[0]=p;var o={};for(var c in r)hasOwnProperty.call(r,c)&&(o[c]=r[c]);o.originalType=e,o[g]="string"==typeof e?e:a,s[1]=o;for(var l=2;l<i;l++)s[l]=n[l];return t.createElement.apply(null,s)}return t.createElement.apply(null,n)}p.displayName="MDXCreateElement"},84968:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>u,contentTitle:()=>c,default:()=>y,frontMatter:()=>o,metadata:()=>l,toc:()=>g});var t=n(58168),a=n(98587),i=(n(96540),n(15680)),s=["components"],o={id:"caching",title:"Query caching",description:"Describes Apache Druid per-segment and whole-query cache types. Identifies services where you can enable caching and suggestions for caching strategy."},c=void 0,l={unversionedId:"querying/caching",id:"querying/caching",title:"Query caching",description:"Describes Apache Druid per-segment and whole-query cache types. Identifies services where you can enable caching and suggestions for caching strategy.",source:"@site/docs/latest/querying/caching.md",sourceDirName:"querying",slug:"/querying/caching",permalink:"/docs/latest/querying/caching",draft:!1,tags:[],version:"current",frontMatter:{id:"caching",title:"Query caching",description:"Describes Apache Druid per-segment and whole-query cache types. Identifies services where you can enable caching and suggestions for caching strategy."},sidebar:"docs",previous:{title:"Multitenancy",permalink:"/docs/latest/querying/multitenancy"},next:{title:"Using query caching",permalink:"/docs/latest/querying/using-caching"}},u={},g=[{value:"Cache types",id:"cache-types",level:2},{value:"Per-segment caching",id:"per-segment-caching",level:3},{value:"Whole-query caching",id:"whole-query-caching",level:3},{value:"Where to enable caching",id:"where-to-enable-caching",level:2},{value:"Performance considerations for caching",id:"performance-considerations-for-caching",level:2},{value:"Scenarios where caching does not increase query performance",id:"scenarios-where-caching-does-not-increase-query-performance",level:3},{value:"Learn more",id:"learn-more",level:2}],h={toc:g},p="wrapper";function y(e){var r=e.components,n=(0,a.A)(e,s);return(0,i.yg)(p,(0,t.A)({},h,n,{components:r,mdxType:"MDXLayout"}),(0,i.yg)("p",null,"You can enable caching in Apache Druid to improve query times for frequently accessed data. This topic defines the different types of caching for Druid. It describes the default caching behavior and provides guidance and examples to help you hone your caching strategy."),(0,i.yg)("p",null,"If you're unfamiliar with Druid architecture, review the following topics before proceeding with caching:"),(0,i.yg)("ul",null,(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/latest/design/architecture"},"Druid Design")),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/latest/design/segments"},"Segments")),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/latest/querying/query-execution"},"Query execution"))),(0,i.yg)("p",null,"For instructions to configure query caching see ",(0,i.yg)("a",{parentName:"p",href:"/docs/latest/querying/using-caching"},"Using query caching"),"."),(0,i.yg)("p",null,"Cache monitoring, including the hit rate and number of evictions, is available in ",(0,i.yg)("a",{parentName:"p",href:"/docs/latest/operations/metrics#cache"},"Druid metrics"),"."),(0,i.yg)("p",null,"Query-level caching is in addition to ",(0,i.yg)("a",{parentName:"p",href:"/docs/latest/design/historical"},"data-level caching")," on Historicals."),(0,i.yg)("h2",{id:"cache-types"},"Cache types"),(0,i.yg)("p",null,"Druid supports two types of query caching:"),(0,i.yg)("ul",null,(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"#per-segment-caching"},"Per-segment caching")," stores partial query results for a specific segment. It is enabled by default."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"#whole-query-caching"},"Whole-query caching")," stores final query results.")),(0,i.yg)("p",null,"Druid invalidates any cache the moment any underlying data change to avoid returning stale results. This is especially important for ",(0,i.yg)("inlineCode",{parentName:"p"},"table")," datasources that have highly-variable underlying data segments, including real-time data segments."),(0,i.yg)("admonition",{type:"info"},(0,i.yg)("p",{parentName:"admonition"}," ",(0,i.yg)("strong",{parentName:"p"},"Druid can store cache data on the local JVM heap or in an external distributed key/value store (e.g. memcached)")),(0,i.yg)("p",{parentName:"admonition"}," The default is a local cache based upon ",(0,i.yg)("a",{parentName:"p",href:"https://github.com/ben-manes/caffeine"},"Caffeine"),". The default maximum cache storage size is the minimum of 1 GiB / ten percent of maximum runtime memory for the JVM, with no cache expiration. See ",(0,i.yg)("a",{parentName:"p",href:"/docs/latest/configuration/#cache-configuration"},"Cache configuration")," for information on how to configure cache storage.  When using caffeine, the cache is inside the JVM heap and is directly measurable.  Heap usage will grow up to the maximum configured size, and then the least recently used segment results will be evicted and replaced with newer results.")),(0,i.yg)("h3",{id:"per-segment-caching"},"Per-segment caching"),(0,i.yg)("p",null,"The primary form of caching in Druid is a ",(0,i.yg)("em",{parentName:"p"},"per-segment results cache"),".  This cache stores partial query results on a per-segment basis and is enabled on Historical services by default."),(0,i.yg)("p",null,"The per-segment results cache allows Druid to maintain a low-eviction-rate cache for segments that do not change, especially important for those segments that ",(0,i.yg)("a",{parentName:"p",href:"/docs/latest/design/historical"},"historical")," processes pull into their local ",(0,i.yg)("em",{parentName:"p"},"segment cache")," from ",(0,i.yg)("a",{parentName:"p",href:"/docs/latest/design/deep-storage"},"deep storage"),". Real-time segments, on the other hand, continue to have results computed at query time."),(0,i.yg)("p",null,"Druid may potentially merge per-segment cached results with the results of later queries that use a similar basic shape with similar filters, aggregations, etc. For example, if the query is identical except that it covers a different time period."),(0,i.yg)("p",null,"Per-segment caching is controlled by the parameters ",(0,i.yg)("inlineCode",{parentName:"p"},"useCache")," and ",(0,i.yg)("inlineCode",{parentName:"p"},"populateCache"),"."),(0,i.yg)("p",null,"Use per-segment caching with real-time data. For example, your queries request data actively arriving from Kafka alongside intervals in segments that are loaded on Historicals. Druid can merge cached results from Historical segments with real-time results from the stream. ",(0,i.yg)("a",{parentName:"p",href:"#whole-query-caching"},"Whole-query caching"),", on the other hand, is not helpful in this scenario because new data from real-time ingestion will continually invalidate the entire cached result."),(0,i.yg)("h3",{id:"whole-query-caching"},"Whole-query caching"),(0,i.yg)("p",null,"With ",(0,i.yg)("em",{parentName:"p"},"whole-query caching"),", Druid caches the entire results of individual queries, meaning the Broker no longer needs to merge per-segment results from data processes."),(0,i.yg)("p",null,"Use ",(0,i.yg)("em",{parentName:"p"},"whole-query caching")," on the Broker to increase query efficiency when there is little risk of ingestion invalidating the cache at a segment level. This applies particularly, for example, when ",(0,i.yg)("em",{parentName:"p"},"not")," using real-time ingestion. Perhaps your queries tend to use batch-ingested data, in which case per-segment caching would be less efficient since the underlying segments hardly ever change, yet Druid would continue to acquire per-segment results for each query."),(0,i.yg)("h2",{id:"where-to-enable-caching"},"Where to enable caching"),(0,i.yg)("p",null,(0,i.yg)("strong",{parentName:"p"},"Per-segment cache")," is available as follows:"),(0,i.yg)("ul",null,(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("p",{parentName:"li"},"On Historicals, the default. Enable segment-level cache population on Historicals for larger production clusters to prevent Brokers from having to merge all query results. When you enable cache population on Historicals instead of Brokers, the Historicals merge their own local results and put less strain on the Brokers.")),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("p",{parentName:"li"},"On ingestion tasks in the Peon or Indexer service. Larger production clusters should enable segment-level cache population on task services only to prevent Brokers from having to merge all query results. When you enable cache population on task execution services instead of Brokers, the task execution services to merge their own local results and put less strain on the Brokers."),(0,i.yg)("p",{parentName:"li"},"   Task executor services only support caches that store data locally. For example the ",(0,i.yg)("inlineCode",{parentName:"p"},"caffeine")," cache. This restriction exists because the cache stores results at the level of intermediate partial segments generated by the ingestion tasks. These intermediate partial segments may not be identical across task replicas. Therefore task executor services ignore remote cache types such as ",(0,i.yg)("inlineCode",{parentName:"p"},"memcached"),".")),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("p",{parentName:"li"},"On Brokers for small production clusters with less than five servers. "))),(0,i.yg)("p",null,"Avoid using per-segment cache at the Broker for large production clusters. When the Broker cache is enabled (",(0,i.yg)("inlineCode",{parentName:"p"},"druid.broker.cache.populateCache")," is ",(0,i.yg)("inlineCode",{parentName:"p"},"true"),") and ",(0,i.yg)("inlineCode",{parentName:"p"},"populateCache")," ",(0,i.yg)("em",{parentName:"p"},"is not")," ",(0,i.yg)("inlineCode",{parentName:"p"},"false")," in the ",(0,i.yg)("a",{parentName:"p",href:"/docs/latest/querying/query-context"},"query context"),", individual Historicals will ",(0,i.yg)("em",{parentName:"p"},"not")," merge individual segment-level results, and instead pass these back to the lead Broker. The Broker must then carry out a large merge from ",(0,i.yg)("em",{parentName:"p"},"all")," segments on its own."),(0,i.yg)("p",null,(0,i.yg)("strong",{parentName:"p"},"Whole-query cache")," is available exclusively on Brokers."),(0,i.yg)("h2",{id:"performance-considerations-for-caching"},"Performance considerations for caching"),(0,i.yg)("p",null,"Caching enables increased concurrency on the same system, therefore leading to noticeable performance improvements for queries on Druid clusters handling throughput for concurrent, mixed workloads."),(0,i.yg)("p",null,"If you are looking to improve response time for a single query or page load, you should ignore caching. In general, response time for a single task should meet performance objectives even when the cache is cold."),(0,i.yg)("p",null,"During query processing, the per-segment cache intercepts the query and sends the results directly to the Broker. This way the query bypasses the data server processing threads. For queries requiring minimal processing in the Broker, cached queries are very quick. If work done on the Broker causes a query bottleneck, enabling caching results in little noticeable query improvement."),(0,i.yg)("p",null,"The largest performance gains from segment caching tend to apply to ",(0,i.yg)("inlineCode",{parentName:"p"},"topN")," and time series queries. For ",(0,i.yg)("inlineCode",{parentName:"p"},"groupBy")," queries, if the bottleneck is in the merging phase on the broker, the impact is less. The same applies to queries with or without joins."),(0,i.yg)("h3",{id:"scenarios-where-caching-does-not-increase-query-performance"},"Scenarios where caching does not increase query performance"),(0,i.yg)("p",null,"Caching does not solve all types of query performance issues. For each cache type there are scenarios where caching is likely to be of little benefit."),(0,i.yg)("p",null,(0,i.yg)("strong",{parentName:"p"},"Per-segment caching")," doesn't work for the following:"),(0,i.yg)("ul",null,(0,i.yg)("li",{parentName:"ul"},"queries containing a sub-query in them. However the output of sub-queries may be cached. See ",(0,i.yg)("a",{parentName:"li",href:"/docs/latest/querying/query-execution"},"Query execution")," for more details on sub-queries execution."),(0,i.yg)("li",{parentName:"ul"},"queries with joins do not support any caching on the broker."),(0,i.yg)("li",{parentName:"ul"},"GroupBy queries do not support segment level caching on broker."),(0,i.yg)("li",{parentName:"ul"},"queries with ",(0,i.yg)("inlineCode",{parentName:"li"},"bySegment")," set in the query context are not cached on the broker.")),(0,i.yg)("p",null,(0,i.yg)("strong",{parentName:"p"},"Whole-query caching")," doesn't work for the following:"),(0,i.yg)("ul",null,(0,i.yg)("li",{parentName:"ul"},"queries that involve an inline datasource or a lookup datasource."),(0,i.yg)("li",{parentName:"ul"},"queries with joins."),(0,i.yg)("li",{parentName:"ul"},"queries with a union datasource.")),(0,i.yg)("h2",{id:"learn-more"},"Learn more"),(0,i.yg)("p",null,"See the following topics for more information:"),(0,i.yg)("ul",null,(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/latest/querying/using-caching"},"Using query caching")," to learn how to configure and use caching."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/latest/design/architecture"},"Druid Design")," to learn about Druid processes.  "),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/latest/design/segments"},"Segments")," to learn how Druid stores data."),(0,i.yg)("li",{parentName:"ul"},(0,i.yg)("a",{parentName:"li",href:"/docs/latest/querying/query-execution"},"Query execution")," to learn how Druid services process query statements.")))}y.isMDXComponent=!0}}]);