Apache Druid 是一个实时分析型数据库,旨在对大型数据集进行快速查询和分析(“OLAP” 查询)。
Druid 最常被当做数据库,用以支持实时摄取、高查询性能和高稳定运行的应用场景。 例如,Druid 通常被用来作为图形分析工具的数据源来提供数据,或当有需要高聚和高并发的后端 API。 同时 Druid 也非常适合针对面向事件类型的数据。
通常可以使用 Druid 作为数据源的系统包括有:
- 点击流量分析(Web 或者移动分析)
- 网络监测分析(网络性能监控)
- 服务器存储指标
- 供应链分析(生产数据指标)
- 应用性能指标
- 数字广告分析
- 商业整合 / OLAP
Druid 的核心架构集合了数据仓库(data warehouses),时序数据库(timeseries databases),日志分析系统(logsearch systems)的概念。
如果你对上面的各种数据类型,数据库不是非常了解的话,那么我们建议你进行一些搜索来了解相关的一些定义和提供的功能。
Druid 的一些关键特性包括有:
- 列示存储格式(Columnar storage format) Druid 使用列式存储,这意味着在一个特定的数据查询中它只需要查询特定的列。 这样的设计极大的提高了部分列查询场景性能。另外,每一列数据都针对特定数据类型做了优化存储,从而能够支持快速扫描和聚合。
- 可扩展的分布式系统(Scalable distributed system) Druid通常部署在数十到数百台服务器的集群中, 并且可以提供每秒数百万级的数据导入,并且保存有万亿级的数据,同时提供 100ms 到 几秒钟之间的查询延迟。
- 高性能并发处理(Massively parallel processing) Druid 可以在整个集群中并行处理查询。
- 实时或者批量数据处理(Realtime or batch ingestion) Druid 可以实时(已经被导入和摄取的数据可立即用于查询)导入摄取数据库或批量导入摄取数据。
- 自我修复、自我平衡、易于操作(Self-healing, self-balancing, easy to operate) 为集群运维操作人员,要伸缩集群只需添加或删除服务,集群就会在后台自动重新平衡自身,而不会造成任何停机。 如果任何一台 Druid 服务器发生故障,系统将自动绕过损坏的节点而保持无间断运行。 Druid 被设计为 7*24 运行,无需设计任何原因的计划内停机(例如需要更改配置或者进行软件更新)。
- 原生结合云的容错架构,不丢失数据(Cloud-native, fault-tolerant architecture that won’t lose data) 一旦 Druid 获得了数据,那么获得的数据将会安全的保存在 深度存储 (通常是云存储,HDFS 或共享文件系统)中。 即使单个个 Druid 服务发生故障,你的数据也可以从深度存储中进行恢复。对于仅影响少数 Druid 服务的有限故障,保存的副本可确保在系统恢复期间仍然可以进行查询。
- 针对快速过滤的索引(Indexes for quick filtering) Druid 使用 Roaring 或 CONCISE 来压缩 bitmap indexes 后来创建索引,以支持快速过滤和跨多列搜索。
- 基于时间的分区(Time-based partitioning) Druid 首先按时间对数据进行分区,同时也可以根据其他字段进行分区。 这意味着基于时间的查询将仅访问与查询时间范围匹配的分区,这将大大提高基于时间的数据处理性能。
- 近似算法(Approximate algorithms) Druid应用了近似
count-distinct
,近似排序以及近似直方图和分位数计算的算法。 这些算法占用有限的内存使用量,通常比精确计算要快得多。对于精度要求比速度更重要的场景,Druid 还提供了exact count-distinct 和 exact ranking。 - 在数据摄取的时候自动进行汇总(Automatic summarization at ingest time) Druid 支持在数据摄取阶段可选地进行数据汇总,这种汇总会部分预先聚合您的数据,并可以节省大量成本并提高性能。
https://www.ossez.com/t/druid/13603