blob: 177304f3286a7a000f7b1b718cb2bb711177e3c7 [file] [log] [blame]
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7436],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var u=n.createContext({}),d=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},c=function(e){var t=d(e.components);return n.createElement(u.Provider,{value:t},e.children)},p="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,u=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=d(r),f=a,m=p["".concat(u,".").concat(f)]||p[f]||l[f]||o;return r?n.createElement(m,s(s({ref:t},c),{},{components:r})):n.createElement(m,s({ref:t},c))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,s=new Array(o);s[0]=f;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[p]="string"==typeof e?e:a,s[1]=i;for(var d=2;d<o;d++)s[d]=r[d];return n.createElement.apply(null,s)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},81867:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>m,frontMatter:()=>i,metadata:()=>d,toc:()=>p});var n=r(87462),a=r(63366),o=(r(67294),r(3905)),s=["components"],i={id:"druid-vs-kudu",title:"Apache Druid vs Kudu"},u=void 0,d={unversionedId:"comparisons/druid-vs-kudu",id:"comparisons/druid-vs-kudu",title:"Apache Druid vs Kudu",description:"\x3c!--",source:"@site/docs/latest/comparisons/druid-vs-kudu.md",sourceDirName:"comparisons",slug:"/comparisons/druid-vs-kudu",permalink:"/docs/latest/comparisons/druid-vs-kudu",draft:!1,tags:[],version:"current",frontMatter:{id:"druid-vs-kudu",title:"Apache Druid vs Kudu"}},c={},p=[],l={toc:p},f="wrapper";function m(e){var t=e.components,r=(0,a.Z)(e,s);return(0,o.kt)(f,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Kudu's storage format enables single row updates, whereas updates to existing Druid segments requires recreating the segment, so theoretically\nthe process for updating old values should be higher latency in Druid. However, the requirements in Kudu for maintaining extra head space to store\nupdates as well as organizing data by id instead of time has the potential to introduce some extra latency and accessing\nof data that is not needed to answer a query at query time."),(0,o.kt)("p",null,"Druid summarizes/rollups up data at ingestion time, which in practice reduces the raw data that needs to be\nstored significantly (up to 40 times on average), and increases performance of scanning raw data significantly.\nDruid segments also contain bitmap indexes for fast filtering, which Kudu does not currently support.\nDruid's segment architecture is heavily geared towards fast aggregates and filters, and for OLAP workflows. Appends are very\nfast in Druid, whereas updates of older data are higher latency. This is by design as the data Druid is good for is typically event data,\nand does not need to be updated too frequently. Kudu supports arbitrary primary keys with uniqueness constraints, and\nefficient lookup by ranges of those keys. Kudu chooses not to include the execution engine, but supports sufficient\noperations so as to allow node-local processing from the execution engines. This means that Kudu can support multiple frameworks on the same data (e.g., MR, Spark, and SQL).\nDruid includes its own query layer that allows it to push down aggregations and computations directly to data processes for faster query processing."))}m.isMDXComponent=!0}}]);