Druid是一款开源的,为实时和离线数据的亚秒级查询设计的数据存储引擎。它主要用于对事实数据(event data)进行商业智能OLAP分析。Druid提供低延时(实时)数据导入,灵活的数据探索(data exploration)和快速的数据聚合。目前Druid可以适用于万亿条和PB级的数据量,Druid最常用于面向用户的数据分析应用中。
关键词
- 亚秒级OLAP查询
- 实时数据流的导入
- 多用户同时查询
- 成本和性能的平衡
- 高可用性
- 可扩展性
Druid是否适合我?
这部分提供了Druid适合满足的需求。如果我们要开发的应用正好有相同的需求,那么Druid是一个很好的选择。
- 快速聚合和OLAP查询的应用
- 实时数据分析(当然,Druid同样可以满足离线数据分析的需求)
- 海量数据(万亿条,PB级)
- 始终可用的数据存储引擎
Druid与其他引擎的比较
这里将Druid和其他常见的数据存储和查询引擎进行对比,以便于更好的理解Druid使用场景。
- Druid vs Elastichsearch
Druid | Elasticsearch | |
---|---|---|
整体定位 | OLAP引擎,提供高性能、低成本的数据分析操作 | 用于搜索系统,提供全文本的搜索功能 |
数据格式 | 结构化数据,需要提前定义好数据schema | 非结构化数据,可以导入任意schema的数据 |
存储要求 | 可以在数据导入时进行汇总聚合,缩减数据量 | 原始日志级的存储,存储增长较快 |
聚合特性 | 专门为数据聚合查询优化 | 也可以支持数据聚合查询,但资源开销较大 |
- Druid vs Key/Value Stores(HBase..)
Druid | Key/Value Stores | |
---|---|---|
OLAP查询方式 | 支持任何维度下的指标聚合查询 | 聚合查询需要将所有可能的查询集合预计算并保存,需要大量的预计算和存储开销。Range scan的聚合方式由于没有针对维度和时间列进行索引,需要扫描大量的数据行,当数据量增加时,查询性能会大幅降低 |
- Druid vs SQL-on-Hadoop(Impala/Drill/Spark SQL/..)
Druid | SQL-on-Hadoop | |
---|---|---|
查询方式 | 数据在每个server查询,查询结果在servers之间传输 | 数据从存储层到计算层,存在一定的延迟(serde time) |
数据导入 | 支持实时数据的导入,并可以立即查询 | 基于HDFS的存储方式,限制了数据导入的速率 |
查询灵活性 | Druid的查询语句偏底层,SQL的支持上存在不完善(不支持JOIN) | 对SQL查询支持良好 |
总结
Druid最适合的场景是,对海量实时数据,从Kafka导入到Druid中,并进行OLAP查询。当然,Druid同时也支持离线数据的导入和查询,也可以达到很高的查询性能。