数据查询流程

<< Click to Display Table of Contents >>

当前位置:  VooltDB数据集市 > 技术架构 

数据查询流程

复制链接

1. 单表查询流程

VooltDB接收到Client发起的查询是针对分布式表,当发现查询的分布式表所需要的数据在不同的分片实例上,请求节点会发送查询本地表的子查询请求到相应分片,并行计算后取回数据到原始节点进行数据的合并。

OneTableQuery

2. Join查询流程

2.1 分布式表和分布式表Join

在 VooltDB集群中跨表进行Join时,采用 Global Join的方式。是在此类操作会将右表数据全部查询到访问节点生成临时表,并分发到各个分片,然后在各个分片完成Join操作后返回结果到访问节点进行汇总。基于此,在做Join操作时,最好将小表放在右边。

举例说明:table_a是分布式表,对应的本地表是table_a_local

Select * from table_a join table_b:

1) Select * from table_b as table_temp

2) 将table_temp分发到各个节点

3) 在各个节点执行join:Select * from table_a_local join table_temp

4) 汇总各个节点的查询结果

2.2 分布式表和维度表Join

由于维度表在每个节点都具有全量数据,那么在分布式表Join维度表的操作中,可以直接将查询拆分为多个子查询即可。

举例说明:table_a是分布式表,对应的本地表是table_a_local;table_b是维度表,本身就是本地表。

Select * from table_a join table_b:

1) 在各个节点执行join:Select * from table_a_local join table_b

2) 汇总各个节点的查询结果

2.3 分片表和分片表Join

当Join的两个表都使用了分片入集市,并且参与Join的两个子数据集联接条件中选择的联接列就是分片列。这种情况下,由于两个表具有相同hash值的数据都分到了同一个分片,这样在做Join时可以直接在本地进行Join,不受其它节点数据的影响。需要注意的是只支持等值Join。

举例说明:table_a是分布式表,对应的本地表是table_a_local;table_b是分布式表,对应的本地表是table_b_local

Select * from table_a join table_b:

1) 在各个节点执行join:Select * from table_a_local join table_b_local

2) 汇总各个节点的查询结果