Druid 单词来源于西方古罗马的神话人物,中文经常翻译成德鲁伊。
本问介绍的Druid 是一个分布式的支持实时分析的数据存储系统(Data Store)。美国广告技术公司MetaMarkets 于2011 年建立了Druid 项目,而且于2012 年晚期开源了Druid 项目。Druid 设计之初的想法就是为分析而生,它在处理数据的规模、数据处理的实时性方面,比传统的OLAP 系统有了显著的性能改进,并且拥抱主流的开源生态,包括Hadoop 等。多年以来,Druid 一直是很是活跃的开源项目。
Druid 的官方网站是http://druid.io。
另外,阿里巴巴也曾建立过一个开源项目叫做Druid(简称阿里Druid),它是一个数据库链接池的项目。阿里Druid 和本问讨论的Druid 没有任何关系,它们解决彻底不一样的问题。html
大数据一直是近年的热点话题,随着数据量的急速增加,数据处理的规模也从GB 级别增加到TB 级别,不少图像应用领域已经开始处理PB 级别的数据分析。大数据的核心目标是提高业务的竞争力,找到一些能够采起行动的洞察(Actionable Insight),数据分析就是其中的核心技术,包括数据收集、处理、建模和分析,最后找到改进业务的方案。
最近一两年,随着大数据分析需求的爆炸性增加,不少公司都经历过将以关系型商用数据库为基础的数据平台,转移到一些开源生态的大数据平台,例如Hadoop 或Spark 平台,以可控的软硬件成本处理更大的数据量。Hadoop 设计之初就是为了批量处理大数据,但数据处理实时性常常是它的弱点。例如,不少时候一个MapReduce 脚本的执行,很难估计须要多长时间才能完成,没法知足不少数据分析师所指望的秒级返回查询结果的分析需求。
为了解决数据实时性的问题,大部分公司都有一个经历,将数据分析变成更加实时的可交互方案。其中,涉及新软件的引入、数据流的改进等。数据分析的几种常见方法以下图。数据库
整个数据分析的基础架构一般分为如下几类。性能优化
(1)使用Hadoop/Spark 的MR 分析。
(2)将Hadoop/Spark 的结果注入RDBMS 中提供实时分析。
(3)将结果注入到容量更大的NoSQL 中,例如HBase 等。
(4)将数据源进行流式处理,对接流式计算框架,如Storm,结果落在RDBMS/NoSQL 中。
(5)将数据源进行流式处理,对接分析数据库,例如Druid、Vertica 等。架构
在设计之初,开发人员肯定了三个设计原则(Design Principle)。
(1)快速查询(Fast Query):部分数据的聚合(Partial Aggregate)+内存化(In-emory)+索引(Index)。
(2)水平扩展能力(Horizontal Scalability):分布式数据(Distributed Data)+ 并行化查询(Parallelizable Query)。
(3)实时分析(Realtime Analytics):不可变的过去,只追加的将来(Immutable Past,Append-Only Future)。框架
对于数据分析场景,大部分状况下,咱们只关心必定粒度聚合的数据,而非每一行原始数据的细节状况。所以,数据聚合粒度能够是1 分钟、5 分钟、1 小时或1 天等。部分数据聚合(Partial Aggregate)给Druid 争取了很大的性能优化空间。
数据内存化也是提升查询速度的杀手锏。内存和硬盘的访问速度相差近百倍,但内存的大小是很是有限的,所以在内存使用方面要精细设计,好比Druid 里面使用了Bitmap 和各类压缩技术。
另外,为了支持Drill-Down 某些维度,Druid 维护了一些倒排索引。这种方式能够加快AND 和OR 等计算操做。分布式
Druid 查询性能在很大程度上依赖于内存的优化使用。数据能够分布在多个节点的内存中,所以当数据增加的时候,能够经过简单增长机器的方式进行扩容。为了保持平衡,Druid按照时间范围把聚合数据进行分区处理。对于高基数的维度,只按照时间切分有时候是不够的(Druid 的每一个Segment 不超过2000 万行),故Druid 还支持对Segment 进一步分区。
历史Segment 数据能够保存在深度存储系统中,存储系统能够是本地磁盘、HDFS 或远程的云服务。若是某些节点出现故障,则可借助Zookeeper 协调其余节点从新构造数据。
Druid 的查询模块可以感知和处理集群的状态变化,查询老是在有效的集群架构中进行。集群上的查询能够进行灵活的水平扩展。Druid 内置提供了一些容易并行化的聚合操做,例如Count、Mean、Variance 和其余查询统计。对于一些没法并行化的操做,例如Median,Druid暂时不提供支持。在支持直方图(Histogram)方面,Druid 也是经过一些近似计算的方法进行支持,以保证Druid 总体的查询性能,这些近似计算方法还包括HyperLoglog、DataSketches的一些基数计算。oop
Druid 提供了包含基于时间维度数据的存储服务,而且任何一行数据都是历史真实发生的事件,所以在设计之初就约定事件一但进入系统,就不能再改变。
对于历史数据Druid 以Segment 数据文件的方式组织,而且将它们存储到深度存储系统中,例如文件系统或亚马逊的S3 等。当须要查询这些数据的时候,Druid 再从深度存储系统中将它们装载到内存供查询使用。性能
Druid 具备以下技术特色。
• 数据吞吐量大。
• 支持流式数据摄入和实时。
• 查询灵活且快。
• 社区支持力度大。大数据
不少公司选择Druid 做为分析平台,都是看中Druid 的数据吞吐能力。天天处理几十亿到几百亿的事件,对于Druid 来讲是很是适合的场景,目前已被大量互联网公司实践。所以,不少公司选型Druid 是为了解决数据爆炸的问题。优化
不少数据分析软件在吞吐量和流式能力上作了不少平衡,好比Hadoop 更加青睐批量处理,而Storm 则是一个流式计算平台,真正在分析平台层面上直接对接各类流式数据源的系统并很少。
数据分析师的想法常常是天马行空,但愿从不一样的角度去分析数据,为了解决这个问题,OLAP 的Star Schema 实际上就定义了一个很好的空间,让数据分析师自由探索数据。数据量小的时候,一切安好,可是数据量变大后,不能秒级返回结果的分析系统都是被诟病的对象。所以,Druid 支持在任何维度组合上进行查询,访问速度极快,成为分析平台最重要的两个杀手锏。
Druid 开源后,受到很多互联网公司的青睐,包括雅虎、eBay、阿里巴巴等,其中雅虎的Committer 有5 个,谷歌有1 个,阿里巴巴有1 个。最近,MetaMarkets 以前几个Druid 发明人也成立了一家叫做Imply.io 的新公司,推进Druid 生态的发展,致力于Druid 的繁荣和应用。
从技术定位上看,Druid 是一个分布式的数据分析平台,在功能上也很是像传统的OLAP系统,可是在实现方式上作了不少聚焦和取舍,为了支持更大的数据量、更灵活的分布式部署、更实时的数据摄入,Druid 舍去了OLAP 查询中比较复杂的操做,例如JOIN 等。相比传统数据库,Druid 是一种时序数据库,按照必定的时间粒度对数据进行聚合,以加快分析查询。
在应用场景上,Druid 从广告数据分析平台起家,已经普遍应用在各个行业和不少互联网公司中,最新列表能够访问http://druid.io/druidpowered.html。