https://mp.weixin.qq.com/s?__biz=MzI1NDQ3MjQxNA==&mid=2247500714&idx=1&sn=c42805c087f527e51d59d26c22fe572a&chksm=e9c63a1bdeb1b30d26de9d6a3eb25f13193a169fdcccebc8c65fbb12243a686746b1c4acc2c2&mpshare=1&scene=23&srcid=0607pnCvMLp2XLsu79ffsVg3&sharer_sharetime=1654579290780&sharer_shareid=897f9e04a48d630ce25345b46fa6f9be#rd

分库分表之后,也会存在一些问题:

事务问题

跨库关联

排序问题

分页问题

分布式ID

5.1 事务问题
分库分表后,假设两个表在不同的数据库,那么本地事务已经无效啦,需要使用分布式事务了。

5.2 跨库关联
跨节点Join的问题:解决这一问题可以分两次查询实现

5.3 排序问题
跨节点的count,order by,group by以及聚合函数等问题:可以分别在各个节点上得到结果后在应用程序端进行合并。

5.4 分页问题
方案1:在个节点查到对应结果后,在代码端汇聚再分页。

方案2:把分页交给前端,前端传来pageSize和pageNo,在各个数据库节点都执行分页,然后汇聚总数量前端。这样缺点就是会造成空查,如果分页需要排序,也不好搞。

5.5 分布式ID
数据库被切分后,不能再依赖数据库自身的主键生成机制啦,最简单可以考虑UUID,或者使用雪花算法生成分布式ID。

目前流行的分库分表中间件比较多:

cobar

Mycat

Sharding-JDBC

Atlas

TDDL(淘宝)

vitess

文档更新时间: 2022-06-07 13:33   作者:admin