读写分离

主要目的和优点是提高数据库(读)并发
缺点是带来了主从同步延迟的问题
1.数据库qps一般在10w(单表) tps一般在1w 读写分离后可以大幅提升性能

主流实现方案

利用mysql自带的主从复制(原理):

  1. 从库连接主库
  2. 从库创建io线程主动请求更新binlog
  3. 主库创建一个binlogdump线程来发送binlog从库的线程接收.
  4. 从库将接受到的binlog写到relaylog中
  5. 从库的sql线程读取relaylog同步数据到本地(在执行一遍)

代码中通过引入Sharding-JDBC实现读写操作采用不同的数据源

如何解决主从时延问题(方案主要还是依据业务场景)

1.强制将读请求路由到主库处理。
2.根据业务场景延迟读取

分库分表

分库分表主要解决数据库存储量大的问题
分库就是将数据分到不同的数据库中
分表就是将单表数据拆分成多个表比如水平拆分(易企签归档表思路)

引入分库分表带来的主要问题

join 操作 数据在不同的库
事务问题 分布式事务
分布式id

分库分表推荐的方案

当当网的ShardingSphere 项目