"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8918],{15680:(e,t,r)=>{r.d(t,{xA:()=>u,yg:()=>m});var a=r(96540);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,a,i=function(e,t){if(null==e)return{};var r,a,i={},n=Object.keys(e);for(a=0;a<n.length;a++)r=n[a],t.indexOf(r)>=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a<n.length;a++)r=n[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var d=a.createContext({}),l=function(e){var t=a.useContext(d),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},u=function(e){var t=l(e.components);return a.createElement(d.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var r=e.components,i=e.mdxType,n=e.originalType,d=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=l(r),g=i,m=c["".concat(d,".").concat(g)]||c[g]||p[g]||n;return r?a.createElement(m,o(o({ref:t},u),{},{components:r})):a.createElement(m,o({ref:t},u))}));function m(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var n=r.length,o=new Array(n);o[0]=g;var s={};for(var d in t)hasOwnProperty.call(t,d)&&(s[d]=t[d]);s.originalType=e,s[c]="string"==typeof e?e:i,o[1]=s;for(var l=2;l<n;l++)o[l]=r[l];return a.createElement.apply(null,o)}return a.createElement.apply(null,r)}g.displayName="MDXCreateElement"},38173:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>d,default:()=>m,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=r(58168),i=r(98587),n=(r(96540),r(15680)),o=["components"],s={id:"druid-vs-redshift",title:"Apache Druid vs Redshift"},d=void 0,l={unversionedId:"comparisons/druid-vs-redshift",id:"comparisons/druid-vs-redshift",title:"Apache Druid vs Redshift",description:"\x3c!--",source:"@site/docs/29.0.0/comparisons/druid-vs-redshift.md",sourceDirName:"comparisons",slug:"/comparisons/druid-vs-redshift",permalink:"/docs/29.0.0/comparisons/druid-vs-redshift",draft:!1,tags:[],version:"current",frontMatter:{id:"druid-vs-redshift",title:"Apache Druid vs Redshift"}},u={},c=[{value:"How does Druid compare to Redshift?",id:"how-does-druid-compare-to-redshift",level:3},{value:"Real-time data ingestion",id:"real-time-data-ingestion",level:3},{value:"Druid is a read oriented analytical data store",id:"druid-is-a-read-oriented-analytical-data-store",level:3},{value:"Data distribution model",id:"data-distribution-model",level:3},{value:"Replication strategy",id:"replication-strategy",level:3},{value:"Indexing strategy",id:"indexing-strategy",level:3}],p={toc:c},g="wrapper";function m(e){var t=e.components,r=(0,i.A)(e,o);return(0,n.yg)(g,(0,a.A)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.yg)("h3",{id:"how-does-druid-compare-to-redshift"},"How does Druid compare to Redshift?"),(0,n.yg)("p",null,"In terms of drawing a differentiation, Redshift started out as ParAccel (Actian), which Amazon is licensing and has since heavily modified."),(0,n.yg)("p",null,"Aside from potential performance differences, there are some functional differences:"),(0,n.yg)("h3",{id:"real-time-data-ingestion"},"Real-time data ingestion"),(0,n.yg)("p",null,"Because Druid is optimized to provide insight against massive quantities of streaming data; it is able to load and aggregate data in real-time."),(0,n.yg)("p",null,"Generally traditional data warehouses including column stores work only with batch ingestion and are not optimal for streaming data in regularly."),(0,n.yg)("h3",{id:"druid-is-a-read-oriented-analytical-data-store"},"Druid is a read oriented analytical data store"),(0,n.yg)("p",null,"Druid\u2019s write semantics are not as fluid and does not support full joins (we support large table to small table joins). Redshift provides full SQL support including joins and insert/update statements."),(0,n.yg)("h3",{id:"data-distribution-model"},"Data distribution model"),(0,n.yg)("p",null,'Druid\u2019s data distribution is segment-based and leverages a highly available "deep" storage such as S3 or HDFS. Scaling up (or down) does not require massive copy actions or downtime; in fact, losing any number of Historical processes does not result in data loss because new Historical processes can always be brought up by reading data from "deep" storage.'),(0,n.yg)("p",null,"To contrast, ParAccel\u2019s data distribution model is hash-based. Expanding the cluster requires re-hashing the data across the nodes, making it difficult to perform without taking downtime. Amazon\u2019s Redshift works around this issue with a multi-step process:"),(0,n.yg)("ul",null,(0,n.yg)("li",{parentName:"ul"},"set cluster into read-only mode"),(0,n.yg)("li",{parentName:"ul"},"copy data from cluster to new cluster that exists in parallel"),(0,n.yg)("li",{parentName:"ul"},"redirect traffic to new cluster")),(0,n.yg)("h3",{id:"replication-strategy"},"Replication strategy"),(0,n.yg)("p",null,"Druid employs segment-level data distribution meaning that more processes can be added and rebalanced without having to perform a staged swap. The replication strategy also makes all replicas available for querying. Replication is done automatically and without any impact to performance."),(0,n.yg)("p",null,"ParAccel\u2019s hash-based distribution generally means that replication is conducted via hot spares. This puts a numerical limit on the number of nodes you can lose without losing data, and this replication strategy often does not allow the hot spare to help share query load."),(0,n.yg)("h3",{id:"indexing-strategy"},"Indexing strategy"),(0,n.yg)("p",null,"Along with column oriented structures, Druid uses indexing structures to speed up query execution when a filter is provided. Indexing structures do increase storage overhead (and make it more difficult to allow for mutation), but they also significantly speed up queries."),(0,n.yg)("p",null,"ParAccel does not appear to employ indexing strategies."))}m.isMDXComponent=!0}}]);