GBase 8c 架构有三部分组成:
协调器(Coordinator,CN): 协调器管理和客户端的连接,对客户端发来的SQL进行解析,生产执行计划,把执行计划发到相应的数据节点进行读写操作,并将结果汇总返回给客户端。对于涉及跨 DN 的数据写操作,协调者还负责协调所有参与者进行两阶段提交。
数据节点(DataNode,DN): 数据节点是数据实际存放的节点,保存表和索引等数据库对象。数据节点接收协调器下发的读写操作,并将结果返回给协调者处理。数据节点间也可以通信,进行跨数据节点的联合查询。
全局事务管理器(Global Transaction Manager,GTM): 全局事务管理器管理全局事务号和活动事务状态,确保系统的全局一致性。
对于分布式查询,根据关联表类型的不同分为:复制表+复制表、复制表+分布表、分布表+分布表,数据落在相同 HG 上、分布表+分布表,数据落在不同 HG 上,四种情况。
复制表+复制表
- 应用发出查询SQL
- CN解析SQL,计算出SQL涉及的表均为复制表
- 向本HG发送SQL
- 获得结果返回应用
这类查询不涉及数据移动,无临时计算结果,查询性能高,支持高并发,性能线性提升。
复制表+分布表
- 应用发出查询数据SQL
- CN根据查询条件判断包含复制表和分布表,则分别向HG-1、HG-2、HG-3 查询数据,并获得每个节点上的结果
- 合并结果并返回
这类查询性能较高,高并发的支持不如只涉及单组情况,适用于大表的存储。
分布表+分布表
分布表+分布表的查询,分为数据落在相同HG上和不同HG上两种类型。
数据落在相同HG上:
TD1和TD2皆为分布表,以uid为分布列:
- CN接收到SQL后,根据集群元数据存储的分片规则,确认此次查询仅涉及HG-1
- 把SQL语句直接发送给HG-1,获得执行结果
- CN将结果返回给用户
这类查询性能高,无冗余操作,支持高并发,性能线性提升。
数据落在不同HG上:
TD1和TD2皆为分布表,以uid为分布列:
- CN接收到SQL后,根据集群元数据存储的分片规则,根据TD1表的分片规则,生成分布SQL语句
- 把SQL语句发送给HG-1数据引擎执行
- HG-1拉取其他HG上TD2表uid<60 的数据
- 进行 JOIN 查询计算
- HG-1 将结果返回给CN
- CN返回给用户
这类查询性能较差,涉及数据移动,跨节点拉数据,网络传输是瓶颈。