随着业务规模的扩大,数据库不可避免的需要拆分,进行必要的分库, 这样对数据库的 join 操作就变得异常复杂,也增加了数据库维护的困难, 本博文讲解如何解决跨库 join 操作的问题。
分布式数据库
其实解决跨库 join 问题最好的办法就是不对数据库进行分库, 将所有数据都存在一个分布式数据库中,比如近来很火的 tidb, 分布式数据库会自动无限扩容,这样就解决了业务数据规模逐渐变大的问题, 任何对数据的查询和操作都是通过数据库原生 sql 语句的执行来操作, 自然 join 操作也是普通的 sql 语句了。
字段冗余
通过把一部分信息重复存放,这样无需进行 join 操作我们就可以查询到那些冗余的信息了, 但是这只适合加入少量冗余字段以及很少对冗余信息进行修改的情况。
表复制和同步
可以将参加 join 的表格中较小的那一个同步复制到另一个库中, 这样我们就可以在另一个库中进行 join 操作了, 但是当两个表格的数据量都很大时,这种就比较浪费空间了。
链接表
链接表其实就是一个虚拟表,所有对这个虚拟表的查询操作都会转发到另一个被链接的数据库中, 比如 postgresql 中的 fdw 模块就是实现类似的功能的,具体请看postgresql之fdw模块。