在分库分表模式下,数据访问代理会根据拆分键(即拆分字段)以及 SQL 语义把 SQL 语句分发到底层中各个存储数据的分表进行执行。执行结束后,数据访问代理会将从各个分表获取的数据合并,然后返回给用户。本文介绍在分库分表场景中数据访问代理执行 SQL 语句时的路由原理以及数据合并。

有关数据访问代理的数据拆分原理,请参考文档 分库分表

拆分键

分库分表过程中,数据访问代理按照指定的拆分键,采用特定的算法进行计算,然后根据计算结果将数据存储到对应的分表中。拆分键是数据访问代理中数据分布和 SQL 路由的凭证。

拆分键

SQL 路由

当用户发起执行 SQL 语句的请求时,数据访问代理会理解 SQL 语句的含义,然后按照拆分键的值和执行策略将 SQL 语句路由到对应分区进行执行,如下图所示:

SQL 路由

数据合并

如果一个 SQL 语句被路由到多个分表执行,数据访问代理会将各个分表返回的数据按照原始 SQL 语义进行合并,并将最终结果返回给用户。

数据合并