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




