SQL 查询机制的,Greenplum 的多进程并行设计确实蛮有意思的。它不是单打独斗,而是靠一群叫“gang”的进程一起干活。
在Greenplum里,主节点有个叫QD
的角色,像个指挥官,负责派发查询计划、收集结果。分片节点上有QE
,干的是具体活,各自负责一块。每块任务叫一个“slice”,每个 slice 至少有一个执行进程。
查询执行的时候,每个 segment 会同时跑好几个进程,一起各自的任务,效率还挺高。而这些干同一件事的进程,就被叫做一“gang”,数据就在 gang 之间流转,通过一个叫interconnect的通信通道穿来穿去。
简单说就是:QD 发号施令,QE 分头干活,gang 组团协作,数据像接力棒一样传上来。这个机制适合那种数据量巨大的查询。
哦对了,如果你想深入了解其他数据库查询机制,下面这些链接也值得看看:
如果你平时也在搞 SQL 性能调优,不妨看看 Greenplum 的这种架构思路,说不定能给你点新灵感。