Druid 概述

解决两个核心问题:
-. RDBMS的查询太慢。
-. 支持灵活的查询分析能力。

Druid的三个设计原则

  1. 快速查询:部分数据的聚合(Partial Aggregate) + 内存化(In-Memory) + 索引(Index)
  2. 水平扩展能力:分布式数据(Distributed Data) + 并行化查询(Parallelizable Query)
  3. 实时分析: 不可变的过去,只追加的未来(Immutable Past, Append-Only Future)

快速查询

大部分数据分析场景,我们只会关心一定粒度聚合的数据,而非每一行的原始数据的细节情况,给Druid争取了很大的性能优化空间。精细的内存使用设置,如BItMap和各种压缩技术。为了支持Drill-Down某些维度,Druid维护了一些倒排索引。这种凡是可以加快AND和OR等计算操作。

水平扩展能力

数据可以分布在多个节点的内存中,因此当数据增长的时候,可以通过简单增加机器的方式进行扩容。为了保持平衡,Druid按照时间范围把聚合数据进行分区处理。历史Segment数据可以保存在深度存储系统(HDFS等)中。如果某些节点出现故障,可借助Zookeeper协调其他节点进行重新构造。Druid查询模块能够感知和处理集群的状态变化。

实时分析

Druid提供了包含基于时间维度数据的存储服务,并且任何一行数据都是历史真实发生的时间,因此在设计之初就约定时间一旦进入系统,就不能在改变。

Druid的技术特点

  1. 数据吞吐量大
  2. 支持流式数据摄入和实时
  3. 查询灵活且快
  4. 社区支持力度大

Druid的基本概念

数据格式

Druid在数据摄入之前,首先需要定义一个数据源(DataSource), 这个DataSource有些类似数据库中表的概念。每个数据集包括三个部分:时间列(TimeStamp)、维度列(Dimension)和指标列(Metric)。

  1. 时间列
    每个数据集合必须有时间列,Druid会讲时间很近的一些数据行聚合在一起。因此所有的查询都需要指定查询时间范围。
  2. 维度列
    用来标识一些事件(Event),这些标识主要用于过滤或者切片数据,维度列的字段为字符串类型。随着业务分析的精细化,增加维度列也是一个常见的需求。
  3. 指标列
    用于聚合和计算的列。

你可能感兴趣的:(Druid 概述)