MPP(Massively Parallel Processing)的直接翻译是“大规模并行处理”,但是TiDB官方文档里介绍有两块:
- 在讲如何开启MPP时,提了一句“TiFlash 支持 MPP 模式的查询执行,即在计算中引入跨节点的数据交换(data shuffle 过程)”。 使用 MPP 模式
- 5.0.0 Release Note中,介绍的也比较模糊。MPP架构
TiDB 通过 TiFlash 节点引入了 MPP 架构。这使得大型表连接类查询可以由不同 TiFlash 节点分担共同完成。
当 MPP 模式开启后,TiDB 会通过代价决策是否应该交由 MPP 框架进行计算。MPP 模式下,表连接将通过对 JOIN Key 进行数据计算时重分布(Exchange 操作)的方式把计算压力分摊到各个 TiFlash 执行节点,从而达到加速计算的目的。更进一步,加上之前 TiFlash 已经支持的聚合计算,MPP 模式下 TiDB 可以将一个查询的计算都下推到 TiFlash MPP 集群,从而借助分布式环境加速整个执行过程,大幅度提升分析查询速度。
这两块一个是说怎么开启MPP,一个是说MPP是什么东西。但是并没有介绍MPP针对的是什么应用场景,如何更好的使用MPP?如果只有一个TiFlash节点,对查询优化有帮助么?
是不是,MPP可以更好使用TiFlash列式存储的优势,针对一些查询纬度复杂(比如说订单表,可能查询的纬度有5、6种),如果每个字段都加索引的话,对TiDB的写入性能影响很大,而因为TiFlash是列式存储,天然针对每个字段都做了单列索引,所以对这类复杂查询比较友好?更进一步,是不是只要把表同步TiFlash,那么这个表上的单列索引就可以废弃掉了?
另外,就是多个TiFlash节点和单个TiFlash的优势在什么地方?是如果存在多个TiFlash节点,单个表的Region就可能存在在多个TiFlash节点上,效率更高么?