"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[788],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var a=r(7294);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 l=a.createContext({}),d=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},u=function(e){var t=d(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,i=e.mdxType,n=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=d(r),m=i,f=c["".concat(l,".").concat(m)]||c[m]||p[m]||n;return r?a.createElement(f,o(o({ref:t},u),{},{components:r})):a.createElement(f,o({ref:t},u))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var n=r.length,o=new Array(n);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:i,o[1]=s;for(var d=2;d<n;d++)o[d]=r[d];return a.createElement.apply(null,o)}return a.createElement.apply(null,r)}m.displayName="MDXCreateElement"},6339:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>f,frontMatter:()=>s,metadata:()=>d,toc:()=>c});var a=r(7462),i=r(3366),n=(r(7294),r(3905)),o=["components"],s={id:"druid-vs-redshift",title:"Apache Druid vs Redshift"},l=void 0,d={unversionedId:"comparisons/druid-vs-redshift",id:"comparisons/druid-vs-redshift",title:"Apache Druid vs Redshift",description:"\x3c!--",source:"@site/docs/latest/comparisons/druid-vs-redshift.md",sourceDirName:"comparisons",slug:"/comparisons/druid-vs-redshift",permalink:"/docs/latest/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},m="wrapper";function f(e){var t=e.components,r=(0,i.Z)(e,o);return(0,n.kt)(m,(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h3",{id:"how-does-druid-compare-to-redshift"},"How does Druid compare to Redshift?"),(0,n.kt)("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.kt)("p",null,"Aside from potential performance differences, there are some functional differences:"),(0,n.kt)("h3",{id:"real-time-data-ingestion"},"Real-time data ingestion"),(0,n.kt)("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.kt)("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.kt)("h3",{id:"druid-is-a-read-oriented-analytical-data-store"},"Druid is a read oriented analytical data store"),(0,n.kt)("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.kt)("h3",{id:"data-distribution-model"},"Data distribution model"),(0,n.kt)("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.kt)("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.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"set cluster into read-only mode"),(0,n.kt)("li",{parentName:"ul"},"copy data from cluster to new cluster that exists in parallel"),(0,n.kt)("li",{parentName:"ul"},"redirect traffic to new cluster")),(0,n.kt)("h3",{id:"replication-strategy"},"Replication strategy"),(0,n.kt)("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.kt)("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.kt)("h3",{id:"indexing-strategy"},"Indexing strategy"),(0,n.kt)("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.kt)("p",null,"ParAccel does not appear to employ indexing strategies."))}f.isMDXComponent=!0}}]);