数据库优化
1、换数据库
2、优化SQL
3、读写分离
4、分库分表
1、主从同步,读写分离
一次插入,多次查询
Mysql proxy 代理进行
2、分库分表
分库
|
分表 |
垂直: |
垂直: |
电商:订单表,会员表,商品表 |
user表:userbase、userinfo(主键user id 作唯一表示) |
水平: |
水平: |
一个库分成两个 | 一个表分成两个表 |
垂直
1、每个库(表)的结构都不一样
2、每个库(表)的数据至少有一列是一样的
3、每个库(表)的并集就是全部数据
优点:
1、拆分后业务清晰
2、数据维护简单,按业务不同在不同机器上
缺点:
1、单表数据量大,读写压力大
2、受业务来决定或被限制一个业务会影响数据库瓶颈
3、部分业务无法关联,提高开发复杂度
水平
1、每个库(表)的结构都一样
2、每个库(表)的数据都是一样的
3、每个库(表)的并集就是全部数据
优点:
1、单库的数据保持在一定的量,有助于性能提高
2、提高了系统的稳定性和负载能力
3、切分的表的结构相同,程序改造较少
缺点:
1、扩容难,增加库计算规则发生改变
2、拆分规则很难抽象出来
3、分片事务的一致性问题部分业务的无法关联,只能通过Java接口去调用
问题
ACID 分布式事务
维护成本
跨库的查询问题
分布式全局唯一ID
分库分表 中间件
proxy代理层
mycat、shardingproxy
支持跨语言
JDBC应用层
shardingjdbc
支持多种数据库