Citus分布式表的查询处理

查询分布式表功能介绍

聚合函数

Citus支持并行化PostgreSQL支持的大多数聚合函数。Citus的查询规划器将聚合转换为其可交换和关联形式。在此过程中,在Work的分片上运行聚合查询,然后协调器将Work的结果组合在一起以生成最终结果进行输出。

计数(count distinct)聚合

Citus支持多种计数(distinct)聚合。如果计数在分发列上,Citus可以直接将查询下推到Work。如果没有,Citus会在每个worker上运行select distinct语句,并将结果返回给协调器,在协调器中获取最终计数。

当Worker拥有更多不同的计算列,要传输这些数据到协调器会使计算变慢(推荐使用HyperLogLog)。
例如:

SELECT  count(distinct a ), count(distinct b ), count(distinct c )
FROM  table_abc 

重新分区

在某些情况下,您可能需要在分发列以外的列上连接两个表。对于这种情况,Citus还允许通过动态地为查询重新分区以进行支持。

在这种情况下,要重新分区的表由查询优化器根据分发列,连接键和表的大小来确定。使用重新分区表,可以确保只有相关的分片进行连接,从而大大减少了通过网络传输的数据量。

参考表

由于参考表在所有工作节点上完全复制,因此可以在Worker进行本地连接并且可以并行执行。因为参考表不分布在任何特定列上,可以更自由的使用。

共址表连接

对于共址表,可以在其公共分布列上高效地连接。共址表的连接是连接两个大型分布式表的最有效方式。

join

Citus支持任意数量的表之间的equi-JOIN,无论其大小和分配方法如何。查询计划程序根据表的分布方式选择最佳连接方法和连接顺序。它评估几个可能的连接顺序,并创建一个连接计划,该计划要求通过网络传输最少的数据。

分布式表的视图

Citus支持分布式表的所有视图
Citus也支持物化视图,并将它们作为本地表存储在协调器节点上。

条件下推

Citus还尽可能地将限制条件下放到Worker的分片上,以最大限度地减少通过网络传输的数据量。

TOP-N,HyperLogLog

Citus支持该插件,详见其他文章。

文章浏览总量 2,419 次

要发表评论,您必须先登录