难得一见如此接地气的分库分表全程实践( 八 )

分表完成后可以解决单表的压力,但数据库本身的压力却没有下降。

我们在完成分表之后的一个月内又由于数据库里“其他表”的写入导致整个数据库 IO 增加,而且这些“其他表”还和业务关系不大。

也就是说一些可有可无的数据导致了整体业务受影响,这是非常不划算的事情。

于是我们便把这几张表单独移到一个新的数据库中,完全和现有的业务隔离开来。

这样就会涉及到几个改造:

应用自身对这些数据的查询、写入都要改为调用一个独立的 Dubbo 服务,由这个服务对迁移的表进行操作;暂时不做数据迁移,所以查询时也得按照分表那样做一个兼容,如果查询老数据就要在当前库查询,新数据就要调用 Dubbo 接口进行查询;对这些表的一些关联查询也得改造为查询 Dubbo 接口,在内存中进行拼接即可;如果数据量确实很大,也可将同步的 Dubbo 接口换为写入消息队列来提高吞吐量。目前我们将这类数据量巨大但对业务不太影响的表单独迁到一个库后,数据库的整体 IO 下降明显,业务也恢复正常。

推荐阅读