为什么要分库分表?
分库分表方案更多是对关系型数据库数据存储和访问机制的一种补充。
分库分表有哪些方式?
垂直拆分
特点
按照业务拆分,每个库(表)的结构都不一样。
拆后的库(表)至少有一列相同的列。
每个库(表)的并集是全量数据。
优点
拆分后业务清晰(专库专用按业务拆分)。
数据维护简单,按业务不同业务放到不同的机器上。
缺点
1)如果单表数据量大,读写压力大。
2)受某种业务来决定或者被限制。也就是说一个业务往往会影响到数据库的瓶颈。
3)部分业务无法关联,join只能通过Java程序接口去调用,增加了开发复杂度。
水平拆分
特点
1)每个库(表)结构一样
2)每个库(表)的数据都不一样
3)每个库(表)的并集都是全量数据
优点
1)单库(表)的数据保持在一定的量(减少),有助于行能提高。
2)提高了系统的稳定性和负载能力。
3)拆分的库(表)的机构相同,程序改造较少。
缺点
1)数据的扩容有难度,维护量大。
2)拆分规则很难抽象出来。
3)分片事务的一致性问题,部分业务无法关联。
join只能通过Java程序接口去调用。
分库分表会带来哪些问题?
1)分布式事务ACID
2)跨库join查询
3)分布式全局唯一ID
4)开发成本,程序员要求高
分库分表的实现框架
jdbc直连层:
Shardingsphere,tdd1
优缺点:
1)速度快
proxy 代理层:
myact,mysql-proxy(atlas 360)
优缺点:
1)对程序员友好