"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2577],{15680:(e,r,t)=>{t.d(r,{xA:()=>l,yg:()=>f});var n=t(96540);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function s(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?o(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function i(e,r){if(null==e)return{};var t,n,a=function(e,r){if(null==e)return{};var t,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)t=o[n],r.indexOf(t)>=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)t=o[n],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var c=n.createContext({}),u=function(e){var r=n.useContext(c),t=r;return e&&(t="function"==typeof e?e(r):s(s({},r),e)),t},l=function(e){var r=u(e.components);return n.createElement(c.Provider,{value:r},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},m=n.forwardRef((function(e,r){var t=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),p=u(t),m=a,f=p["".concat(c,".").concat(m)]||p[m]||d[m]||o;return t?n.createElement(f,s(s({ref:r},l),{},{components:t})):n.createElement(f,s({ref:r},l))}));function f(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var o=t.length,s=new Array(o);s[0]=m;var i={};for(var c in r)hasOwnProperty.call(r,c)&&(i[c]=r[c]);i.originalType=e,i[p]="string"==typeof e?e:a,s[1]=i;for(var u=2;u<o;u++)s[u]=t[u];return n.createElement.apply(null,s)}return n.createElement.apply(null,t)}m.displayName="MDXCreateElement"},64745:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>l,contentTitle:()=>c,default:()=>f,frontMatter:()=>i,metadata:()=>u,toc:()=>p});var n=t(58168),a=t(98587),o=(t(96540),t(15680)),s=["components"],i={id:"druid-vs-elasticsearch",title:"Apache Druid vs Elasticsearch"},c=void 0,u={unversionedId:"comparisons/druid-vs-elasticsearch",id:"comparisons/druid-vs-elasticsearch",title:"Apache Druid vs Elasticsearch",description:"\x3c!--",source:"@site/docs/29.0.0/comparisons/druid-vs-elasticsearch.md",sourceDirName:"comparisons",slug:"/comparisons/druid-vs-elasticsearch",permalink:"/docs/29.0.0/comparisons/druid-vs-elasticsearch",draft:!1,tags:[],version:"current",frontMatter:{id:"druid-vs-elasticsearch",title:"Apache Druid vs Elasticsearch"}},l={},p=[],d={toc:p},m="wrapper";function f(e){var r=e.components,t=(0,a.A)(e,s);return(0,o.yg)(m,(0,n.A)({},d,t,{components:r,mdxType:"MDXLayout"}),(0,o.yg)("p",null,"We are not experts on search systems, if anything is incorrect about our portrayal, please let us know on the mailing list or via some other means."),(0,o.yg)("p",null,"Elasticsearch is a search system based on Apache Lucene. It provides full text search for schema-free documents\nand provides access to raw event level data. Elasticsearch is increasingly adding more support for analytics and aggregations.\n",(0,o.yg)("a",{parentName:"p",href:"https://groups.google.com/forum/#!msg/druid-development/nlpwTHNclj8/sOuWlKOzPpYJ"},"Some members of the community")," have pointed out\nthe resource requirements for data ingestion and aggregation in Elasticsearch is much higher than those of Druid."),(0,o.yg)("p",null,"Elasticsearch also does not support data summarization/roll-up at ingestion time, which can compact the data that needs to be\nstored up to 100x with real-world data sets. This leads to Elasticsearch having greater storage requirements."),(0,o.yg)("p",null,"Druid focuses on OLAP work flows. Druid is optimized for high performance (fast aggregation and ingestion) at low cost,\nand supports a wide range of analytic operations. Druid has some basic search support for structured event data, but does not support\nfull text search. Druid also does not support completely unstructured data. Measures must be defined in a Druid schema such that\nsummarization/roll-up can be done."))}f.isMDXComponent=!0}}]);