Skip to main content

Mysql分库分表后带来的六大问题

问题一:跨节点数据库Join关联查询

  • 数据库切分前,多表关联查询,可以通过sql join进行实现
  • 分库分表后,数据可能分布在不同的节点上,sql join带来的问题就比较麻烦

问题二:分库操作带来的分布式事务问题

  • 操作内容同时分布在不同库中,不可避免会带来跨库事务问题,即分布式事务

问题三:执行的SQL排序、翻页、函数计算问题

  • 分库后,数据分布再不同的节点上, 跨节点多库进行查询时,会出现limit分页、order by排序等问题
  • 而且当排序字段非分片字段时,更加复杂了,要在不同的分片节点中将数据进行排序并返回,然后将不同分片返回的结果集进行汇总和再次排序(也会带来更多的CPU/IO资源损耗)

问题四:数据库全局主键重复问题

  • 常规表的id是使用自增id进行实现,分库分表后,由于表中数据同时存在不同数据库中,如果用自增id,则会出现冲突问题

问题五:容量规划,分库分表后二次扩容问题

  • 业务发展快,初次分库分表后,满足不了数据存储,导致需要多次扩容

问题六:分库分表技术选型问题

市场分库分表中间件相对较多,框架各有各的优势与短板,应该如何选择