分库分表带来的问题
一、分布式事务问题
由于水平拆分,垂直拆分数据表,数据在不同的数据库服务上,必然会存在分布式事务问题。
二、数据关联问题
单库单表用join关联数据表就可以了,分库分表后,也会有数据关联的需求,解决方式有:
(1)广播表
Sharding JDBC中,广播表是在每一个节点里都保存一份数据。
(2)冗余部分字段
把一些基础数据,冗余至其他数据表里。但这个会产生数据一致性问题。
(3)代码组装
通过代码查询的方式,组装关联查询。
(4)绑定表
对于相互关联的数据节点,通过分片规则将其切分到同一个库中,这样就可以直接使用SQL的JOIN 进行关联查询。
三、分页、排序、函数问题
对于跨数据节点进行分页、排序或者一些聚合函数,筛选出来的仅仅是针对当前节点,比如排序,仅仅能够保证在单一数据节点上是有序,并不能保证在所有节点上都是有序的,需要将各个节点的数据的进行汇总重新手动排序。
四、全局唯一性ID问题
(1)UUID
(2)雪花算法
五、历史数据问题
历史数据通过分片规则,初始化到分库数据库中。