一、为什么要分库分表
1.网站架构:
IE ---> tomcat(登录、注册、下单商品) ---> mysql
2.高并发下,数据库优化
1.换数据库,Oracle、mongodb
2.分库分表
3.读写分离
二、什么是分库分表
500w到1000w的数据,会引发问题
1.分库分表的思路
2.分库
垂直
水平
3.分表
垂直
水平
4.垂直分特点、优缺点
垂直分特点:
1)每个库(表)的结构不一样
2)每个库(表)的数据至少一列一样
3)每个库(表)的并集是全量数据
总结:按照字段拆分(多表字段拆成少表字段)
优点:
1)拆分后业务清晰,专库专用
2)实现动静分离、冷热数据分离设计体现
3)数据维护简单、按业务不同放在不同的机器上
缺点:
1)如果单表数据量大,读写压力大
2)部分业务无法join
5.水平分优缺点
水平分特点:
1)每个库(表)的结构都一样
2)每个库(表)的数据都不一样
3)每个库(表)的并集是全量数据
总结:按照内容拆分
优点:
1)单个库(表)的数据一定量减少,有助于性能提高
2)提高了系统的稳定性和负载能力
缺点:
1)数据的扩容很有难度(取模扩容rehash)
2)拆分规则很难抽象出来
3)部分业务无法join
三、分库分表的一些方式
算法:
范围区分(range):
预定义list
取模hash
四、分库分表带来的问题,解决方案???
出现问题
1.维护成本
2.跨库join
3.分布式事务
4.分布式全局唯一id
方案:shardingsphere、mycat、tddl、atals
jdbc:
shardingshepre(sharding-jdbc)、tddl
逻辑表,根据id改成物理表
proxy代理层:
mycat、tddl
对比:
jdbc应用层性能好一些,直接在内存;proxy多了四次请求
proxy代理层跨语言和无感知
jdbc跨数据库,proxy不可以跨数据库