Apache Druid分析型数据库设计-查询处理

Apache Druid系列博客


官方英文原文:Query processing

查询处理

查询分布在Druid集群中,由Broker进行管理。查询首先进入Broker,它识别有可能与该查询相关的数据的段。段的列表总是按时间剪枝(prune),也可能根据数据源的分区方式由其他属性剪枝。Broker然后将确定哪些HistoricalMiddleManager正在为这些段提供服务,然后将重写的子查询分发给这些进程中的每一个。Historical/MiddleManager进程执行每个子查询并将结果返回给Broker。Broker合并这些部分结果以得到最终答案,并将其返回给原调用者。

时间和属性剪枝是Druid限制每次查询必须扫描的数据量的重要方式,但不是唯一方式。对于比Broker剪枝的细粒度更高的过滤器,每个段内的索引结构允许Historical在查看任何数据行之前找出哪些(如果有)行与过滤器集匹配。一旦Historical知道哪些行与特定查询匹配,它就只会访问该查询所需的特定的行和列。

因此,Druid使用三种不同的技术来最大化查询性能:

  • 对查询要访问的段集进行剪枝
  • 在每个段中,用索引来识别必须要访问的行
  • 在每个段中,仅读取与特定查询相关的特定行和列

有关Druid如何执行查询的更多详细信息,请参阅 查询执行 文档。


Apache Druid系列博客

猜你喜欢

转载自blog.csdn.net/u010393510/article/details/128122518