一:Apache druid 是一种实时分析数据库,设计用于对大型数据集进行快速分析(OLAP),支持数据的实时摄取,提供低时延的查询性能。
二:Apache druid 主要特点
(1)列式存储格式,查询时只加载特定查询的列,还根据数据类型优化每一列的存储,加快查询速度。
(2)可扩展的分布式系统。典型的 Druid 部署跨越数十台到数百台服务器的集群。Druid 能以每秒数百万条记录的速度摄取数据,同时保留数万亿条记录,并保持从亚秒到秒级别的时延。
(3)大规模并行处理。Druid 可以在整个集群中并行处理每个查询。
(4)实时或批量摄取。Druid 可以实时或分批摄取数据。输入的数据可立即用于查询。
(5)自修复、自平衡、易操作。作为操作员,您可以添加服务器以扩大规模,或删除服务器以缩小规模。Druid 集群会在后台自动重新平衡,无需停机。如果 Druid 服务器出现故障,系统会自动绕过损坏的服务器路由数据,直到服务器被替换。Druid 的设计目的是在不因任何原因而计划停机的情况下持续运行。配置更改和软件更新也是如此。
(6)云原生容错架构,不会丢失数据。摄取数据后,Druid 会将数据的副本安全地存储在深度存储中。深度存储通常是云存储、HDFS 或共享文件系统。即使万一所有 Druid 服务器都发生故障,您也可以从深度存储中恢复数据。对于仅影响少数 Druid 服务器的有限故障,复制可确保在系统恢复期间仍可进行查询。
(7)Druid 使用 Roaring 或 CONCISE 压缩位图索引来创建索引,以实现跨多个列的快速过滤和搜索。
(8)基于时间的分区。Druid 首先根据时间对数据进行分区。基于时间的查询只访问与查询时间范围相匹配的分区,从而显著提高性能。
(9)近似算法使用。Druid 包含近似计数区分、近似排序以及近似直方图和定量的计算算法。这些算法提供有限制的内存使用,而且速度往往比精确计算快得多。在精确度比速度更重要的情况下,Druid 还提供精确计数区分和精确排序。
(10)摄取时自动汇总。Druid 可选支持在摄取时进行数据汇总。这种汇总可对数据进行部分预聚合,从而显著节约成本并提高性能。
三:什么场景下使用druid
(1)需求插入率非常高,单数据很少更新。
(2)您的大多数查询都是汇总和报告查询。例如 "分组" 聚合查询。
(3)目标查询延迟时间为 100 毫秒到几秒钟。
(4)数据包含时间。Druid 包括专门针对时间的优化和设计选择。
(5)数据列,基数大,比如url,用户id,需要进行快速的计数和排序
(6)您想从 Kafka、HDFS、普通文件或亚马逊 S3 等对象存储中加载数据。
四:什么场景下不适合使用druid
(1)需要使用主键对现有记录进行低延迟更新。Druid 支持流式插入,但不支持流式更新。您可以使用后台批处理作业来执行更新。
(2)您想进行 "大型 "连接,即连接一个大型事实表和另一个大型事实表,join的场景不适合