分库分表的目的会带来的问题及解决思路

分库分表:

  1. 提升数据库访问速度
  2. 缓解数据压力
  3. 容量

垂直拆分的问题:

跨库的关联查询:

(1)冗余
(2)数据同步 系统之间: http、etl
(3)全局表(广播表)、字典表、基础数据、行名行号表,全局表即多个节点中都有相同的多份数据,更新在多个节点也都会更新
(4)绑定表(E-R表)

oder_info order_id=1001
order_detail order_id=1001 order_detail_id=80001
(5)数据组装 中间件如:mycat的/*catlet data dn1 dn2

分布式事务

ACID
(1)两阶段提交 XA
TCC-Fescar-seata
LCN
Atomikos

水平拆分的问题

分页、排序

全局ID auto_increment

(1)redis原子递增
(2)雪花算法snowflake
(3)UUID
(4)table +1 for update
(5)ZK

多数据源

(1)编码层(AbstractDataSource)
(2)框架层ORM 插件-Interceptor-动态代理
(3)驱动层(Sharding-JDBC)前身为当当网框架、现在为apache开源组件
(4)代理层 proxy mycat
(5)服务层 一些特殊的sql版本

划分数据的规则

user_id % 3 =1 -> dn1

user_id %3 =2 -> dn2

user_id % 3 =0 ->dn0

分片算法:
Hash、取模、范围(0-1000w、1000w-2000w)、时间段(按周、按月分布)、复合、一致性哈希(基于哈希环,java中可以用TreeMap实现哈希环)

实践:基于Sharding-JDBC的实现

扫描二维码关注公众号,回复: 8779435 查看本文章
发布了99 篇原创文章 · 获赞 46 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_35890572/article/details/103533206
今日推荐