分布式执行模型
Hologres 是能够弹性无限水平扩展数据量和计算能力的系统,需要能够支持高效的分布式查询。
Hologres 查询引擎执行的是由优化器生成的分布式执行计划。执行计划由算子组成。因为 Hologres 的一个表的数据会根据 Distribution Key 分布在多个 Shard 上,每个 Shard 内又可以包含很多 Segment,执行计划也会反映这样的结构,并分布到数据所在的节点去执行。每个Table Shard 会被加载到一个计算节点,数据会被缓存到这个节点的内存和本地存储。因为是存储计算分离的架构,如果一个节点出错,其服务的 Shard 可以被重新加载到任意一个计算节点,只是相当于清空了缓存。
例如一个比较简单的查询。
select key, count(value) as total from table1 group by key order by total desc limit 100。
如果是单机数据库,可以用这样的执行计划。如果数据和计算分布在多个节点上,就需要更复杂的执行计划。
在分布式表上,为了更高效地执行,尽量减少数据传输,可以把执行计划分为不同片段(Fragment)分布到相应节点执行,并且把一些操作下推来减少 Fragment 输出的数据。