Druid学习
一、Druid基本
1-1、Druid的简介
Apache Druid是一个实时分析型数据库,针对的是大型数据集的快速查询分析(OLAP)。Druid可以当做数据库来进行实时获取数据、高性能查询、高稳定运行,也可以被用来助力分析型应用的图形化界面,和高并发的后端API。Druid最适合应用于面向事件类型的数据,其使用的架构是MPP架构。
特点就是:处理数据量大、可以实现实时查询、可以实现交互式查询
1-2、架构特征
- 列式存储:效果就是只需要查特定的列,极大提高了列查询场景的性能。并且每一列数据都进行了优化存储,支持快速扫描和聚合。
- 可扩展的分布式存储:Druid部署在集群中,可以提供数万亿记录的保留存储和即席查询。
- 大规模并行处理:Druid在整个集群中是并行处理查询的。
- 实时查询:Druid可以实时查询(摄取的数据可立即用于查询)
- 自动修复、自动平衡、易于操作:在删除服务后会重新计算平衡,不会造成停机,如果有节点发生故障,会自动绕过节点。
- 数据的安全性:在提取数据后,会在存储系统上保留一份副本,以便在故障时可以进行恢复。
- 快速过滤的索引:使用压缩位图来创建索引,可以快速过滤和跨多列搜索。
- 基于时间进行分区:Druid首先会按照时间对数据进行分区,当然也可以根据其他进行分区,对根据时间进行查询的数据更快
- 摄取并汇总:在数据获取后会进行自动数据汇总,预先聚合数据,节省大量成本
1-3、场景的适用和不适用
适用:
- 因为是OLAP,所以数据查询多、更新少的
- Druid有预聚合,所对聚合查询和分组查询,效率更高
- 时间延迟定位在100毫秒-几秒之间
- 因为Druid预先对时间进行分区,所以适用于数据有时间属性的
- 需要从Kafka、HDFS、对象存储中加载数据
- 允许丢失一部分数据,因为Druid可能会出现丢数据现象
不适用
- 对现有的数据进行更新
- 延迟不重要的离线数据系统
- 大数据表连接大数据表的操作(其实不适合join操作,适合单表操作)
- 进行精准的去重
1-4、Druid重要的技术点
- 数据预先聚合
- 列式存储
- 位图索引
- 字典编码的压缩算法
二、MPP(大规模并行处理)简介
由于Druid是MPP架构
2-1、MPP介绍
- MPP也就是大规模并行处理,每个节点都有独立的磁盘存储系统和内存系统,与Hadoop一样,任务会分发到不同节点上进行计算,然后进行汇总。有良好的扩展性、并发性等,适用于支撑各类数据仓库系统、BI系统等。可以处理PB级结构化数据,采用hash分布,采用压缩算法,空间大大减少,提高了IO性能。
- SQL支持好,数据加载速度快。
- 完全采用MPP+Shared Nothing的分布式扁平架构,也就是每个节点不依赖其他节点都是独立的、自给的,所以不存在短板问题,也就是单点瓶颈,性能很高。
2-3、特点与适合的场景
特点
- SQL支持高
- 对关系型操作效率高
- 适合结构化数据
与Hadoop相比的使用场景
- 适合现有关系数据机构下的大数据处理、有较高的效率
- 适合结构化数据
- 适合多维度数据自助分析、OLAP、数据集市等
- 适合处理PB级别,高质量的数据