数据分片的核心由SQL解析 => 执行器优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并的流程组成。
一、路由
分布式数据库采用了分库分表的技术,将庞大的数据按不同的规则进行拆分,存储到不同的分库、分表之中。
当用户想要对数据进行筛选查询的时候,那必须根据分库分表的规则去不同的分库、分表中进行查询。
这样的查询被称为路由。当使用 SQL 携带分片键进行查询时,根据分批键的不同可以分为直接路由、标准路由,以及笛卡尔路由。而不携带分片键的SQL,则采用广播路由查询。
二、官方文档解释
直接路由,条件苛刻,需要使用 Hint 方式分片,并且只分库部分表。
标准路由,推荐使用的分片方式,适用不包含关联查询或仅包含绑定表之间关联查询的SQL。
笛卡尔路由,无法根据分片键定位,需要笛卡尔积的方式进行,查询性能最低。
全库路由,用于处理对所有真实表的操作。
全库表路由,用于处理对数据库的操作。
全实例路由,用于处理对数据库授权语句的操作。
单表路由,用于处理对某一真实表的操作。
阻断路由,用于屏蔽对数据库的操作。
三、测试代码
指定 Hint 进行直接路由查询。
四、总结
本周,先简述下 SQL 路由引擎的作用与测试代码。
对源码有兴趣的同学可以阅读 shardingsphere-route.jar 包。