对于分布式查询,根据关联表类型的不同分为:复制表+复制表、复制表+分片表、分片表+分片表,数据落在相同HG上、分片表+分片表,数据落在不同HG上四种情况,详细查询原理如下:
- 复制表+复制表
- 应用发出查询SQL;
- GCluster解析SQL,计算出SQL涉及的表均为复制表;
- 向本HG发送SQL;
- 获得结果返回应用。
这类查询不涉及数据移动,无临时计算结果,查询性能高,支持高并发,性能线性提升。
- 复制表+分片表
- 应用发出查询数据SQL;
- GCluster据查询条件判断一复制表和一分片表,则分别向HG-1、HG-2、HG-3查询数据;并获得每个节点上结果;
- 合并结果并返回。
这类查询性能较高,高并发的支持不如只涉及单组情况,适于大表的存储。
- 分片表+分片表,数据落在相同HG上
TD1和TD2皆为分片表,以uid为分片列
- GCluster接收到SQL后,根据元数据内存储的分片规则,确认此次查询仅涉及HG-1;
- 把SQL语句直接发送给HG-1,获得执行结果;
- GCluster1将结果返回给用户。
这类查询性能高,无冗余操作,支持高并发,线性提升
(4)分片表+分片表,数据落在不同HG上
TD1和TD2皆为分片表,以uid为分片列
- GCluster接收到SQL后,根据元数据内存储的分片规则,根据TD1表的分片规则,生成分布SQL语句;
- 把SQL语句发送给HG-1数据引擎进行执;
- HG-1拉取其他HG上TD2表uid<60的数据;
- 进行JOIN查询计算;
- HG-1将结果返回给GCluster1;
- GCluster1返回给用户。
这类查询性能较差,涉及数据移动,跨节点拉数据,网络传输是瓶颈。