Apache Druid分析型数据库简介

Apache Druid系列博客


官方英文原文:Introduction to Apache Druid

Apache Druid是一个开源的分布式实时分析型数据库,专为对大型数据集进行快速切片和切块分析(“OLAP”查询)而设计。大多数情况下,Druid用于实时摄取(ingestion)、快速查询性能和高正常运行时间很重要的场景。

Druid普遍用于分析应用程序GUI或需要快速聚合的高并发API的数据库后端,其最适合处理面向事件的数据。

Druid的常见应用领域包括:

  • 点击流(clickstream)分析,包括Web和移动分析
  • 网络遥测分析,包括网络性能监控
  • 服务器指标存储
  • 供应链分析,包括生产指标
  • 应用程序性能指标
  • 数字营销、广告分析
  • 商业智能、OLAP

Druid的关键特性

Apache Druid的核心架构结合了数仓(data warehouse)、时间序列数据库(timeseries database)和日志搜索系统(logsearch system)的思想。Druid的主要特性有:

  1. 列式存储格式。Druid使用列向的存储,这意味着它只加载特定查询所需的确切列。这极大地提高了仅检索几列的查询速度。另外,为了支持快速扫描和聚合,Druid 根据其数据类型优化每一列存储。
  2. 可扩展的分布式系统。典型的Druid部署跨越从数十台到数百台服务器的集群。Druid可以以每秒数百万条记录的速度摄取数据,同时保留数万亿条记录并保持从亚秒到几秒的查询延迟。
  3. 大规模并行处理。Druid能够在整个集群中并行处理每个查询。
  4. 实时或批摄取。Druid能实时或批量摄取数据,摄取的数据能立即用于查询。
  5. 自愈、自平衡、操作简单。作为操作员,您可以添加服务器以扩大规模或删除服务器以缩小规模,Druid集群在后台自动重新平衡,无需停机。如果有Druid服务器出现故障,系统会自动绕过损坏,直到服务器能被更换。Druid旨在连续运行而不会因任何原因计划停机。
  6. 云原生容错架构,不会丢失数据。摄取之后,Druid在深度存储(deep storage)中存储数据的副本。深度存储通常是云存储、HDFS或共享文件系统。即使在极少数情况下所有Druid服务器都发生故障,你也能从深度存储中恢复数据。对于仅影响少数 Druid 服务器的有限故障,复制可确保在系统恢复期间仍然可以进行查询。
  7. 用于快速过滤的索引。Druid用Roaring或CONCISE压缩位图索引来创建索引,,以实现跨多列的快速过滤和搜索。
  8. 基于时间的分区。Druid首先根据时间对数据进行分区。您可以选择根据其他字段实施额外的分区。 基于时间的查询仅访问与查询时间范围匹配的分区,从而显著提高性能。
  9. 近似算法。Druid包含用于近似去重计数、近似排序以及近似直方图和分位数计算的算法。这些算法使用有限的内存,并且通常比精确计算快得多。对于准确性比速度更重要的情况,Druid 还提供精确去重计数和精确排名。
  10. 摄取时自动汇总。Druid可选地支持摄取时数据汇总。 此汇总部分地预聚合您的数据,可能会显着节省成本并提高性能。

什么时候可以使用Druid

Druid 被许多不同规模的公司用于许多不同的用例。 有关详细信息,请参阅Powered by Apache Druid

如果您的用例符合以下几个条件,Druid可能是一个不错的选择:

  • 插入频率高、更新少
  • 查询多为聚合和报告查询,如“group by”查询。搜索和扫描查询也可。
  • 目标查询延迟为 100 毫秒到几秒。
  • 数据有一个时间组件,因为Druid具有与时间相关的优化和设计选择
  • 每个查询都只命中一个大的分布式表,而不是多个表。查询可能会命中多个较小的“查找”表。
  • 有高基数数据列,如:URL、用户ID,且需要对其进行快速计数或排名。
  • 从Kafka、HDFS、普通文件或对象存储(如Amazon S3)载入数据。

不应使用 Druid 的情况包括:

  • 需要低延时地使用主键对现有记录进行更新。Druid支持流式插入,而非流式更新,如果要用Druid处理这种更新,可以采用后台批处理作业的方式。
  • 不太追求查询延时的离线报告系统。
  • 需要做“大”的连接——将一个大表连接到另一个大表。这些查询需要很长时间才能完成。

了解更多

官方链接:


Apache Druid系列博客

猜你喜欢

转载自blog.csdn.net/u010393510/article/details/128121079
今日推荐