mysql分库分表

一、为什么要分库分表

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不可以跨数据库

posted @ 2020-09-05 23:41  木叶小寒江  阅读(273)  评论(0编辑  收藏  举报