分库分表之后,也会存在一些问题:
事务问题
跨库关联
排序问题
分页问题
分布式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