Druid简介系列之一:Druid是什么

本文翻译自:http://druid.io/docs/latest/design/

Druid是什么?

Druid是可以在大数据集上面进行交叉分析的高性能OLAP系统。Druid通常作为强大的分析交互系统的后端存储组件,或者为高并发API提供快速的聚合的能力。druid的典型应用场景如下:

  • 点击流分析(Clickstream analytics)
  • 网络流分析(Network flow analytics)
  • 存储服务器指标(Server metrics storage)
  • 应用性能指标(Application performance metrics)
  • 数字市场分析(Digital marketing analytics)
  • 商业智能和OLAP

Druid的核心特征为:

  1. 列式存储格式:Druid采用列式存储格式,因此它只会加载特定查询所需要的特定列的数据。这就极大的加速了那些只需要个别列数据的查询。另外,每一列还根据数据类型做了专门的优化,以便更好的支持列的快速扫描和聚合。
  2. 可扩展的分布式系统:Druid通常被部署到几十到几百台的服务器上,每秒可以支持导入数百万条记录,存储规模可达数十亿条。具有在这种超大规模的数据场景下提供亚秒级查询响应的能力。
  3. 强大的并行处理能力:Druid可以在整个集群中同时并行查询,以降低一个查询所需要的时间。
  4. 支持实时或批量数据导入:Druid可以支持实时数据导入(导入的数据可以被立即查询到),也可以支持批量导入。
  5. 高度容错,自动负载均衡,以及低操作门槛:druid支持不停机扩缩容。对于运维来说,可以通过简单的增加或删除集群中的机器来轻松地扩展或者收缩集群规模,集群将会自动在后台进行重新负载均衡。当某一台服务器出现问题时,集群将自动下线该服务器直到该服务器恢复正常或者被替换。Druid支持7*24小时在线服务,即使在软件升级或者配置变更的情况下,也不需要下线。
  6. 云原生设计,高度容错的架构以确保不丢失数据:一旦druid接收了数据,数据副本将会被安全的存储在深度存储中(deep storage,通常是云存储,HDFS,或者一个共享的文件系统)。即使所有的druid服务器都出现问题,druid也有能力从深度存储中自动恢复数据。除了深度存储外,druid还支持多副本,当个别服务器出现问题时,druid的多副本保证查询服务不受影响。
  7. 建立索引以支持快速过滤:Druid使用CONCISE和Roaring位图压缩算法来创建索引,这些算法保证在跨列过滤时能够进行非常快速的查询。
  8. 近似算法:Druid实现了快速支持count-distinct, ranking, 直方图以及百分比等近似算法。这些近似算法可以在有限内存的情况下进行快速的计算。对于那些精度比速度更重要的场景,druid也提供了精确的count-distinct和ranking算法。
  9. 在导入数据时自动汇总:Druid可以在导入数据的使用对数据进行自动汇总。这种汇总操作可以对你的数据进行部分预聚合,因此可以极大降低存储成本和提升查询时的速度。

应用场景

Druid适用于以下场景:

  • 插入新数据的量很大,但是并不经常对已插入的数据进行修改。
  • 大部分查询请求是聚合和报表类查询(group by 类查询);也可以支持搜索和扫描类查询。
  • 期望的查询响应时间是100毫秒到几秒之间。
  • 数据是基于时间组织的(Druid对时间处理做了专门的优化)。
  • 可以有多个表,但是每次查询都只能对一个大表进行操作。但是需要的时候可以join一些小的信息表。
  • 你的列具有很高的基数(比如url或者用户id),同时需要进行快速的计数以及根据计数进行排序。
  • 你需要从kafka,HDFS,普通文件,或者类似于Amazon S3之类对象存储中加载数据。

以下场景不适合使用Druid:

  • 你需要通过一些主键对已有的数据进行低延迟的更新。Druid支持流式插入,但是不支持流式更新(更新需要通过后台批处理任务)。
  • 你需要建立一个离线的报表系统,因此查询延迟并不是系统的关键因素。
  • 你需要对多个大表进行join操作。

猜你喜欢

转载自blog.csdn.net/weixin_40735752/article/details/88146266
今日推荐