读写分离
主要目的和优点是提高数据库(读)并发
缺点是带来了主从同步延迟的问题
1.数据库qps一般在10w(单表) tps一般在1w 读写分离后可以大幅提升性能
主流实现方案
利用mysql自带的主从复制(原理):
- 从库连接主库
- 从库创建io线程主动请求更新binlog
- 主库创建一个binlogdump线程来发送binlog从库的线程接收.
- 从库将接受到的binlog写到relaylog中
- 从库的sql线程读取relaylog同步数据到本地(在执行一遍)
代码中通过引入Sharding-JDBC实现读写操作采用不同的数据源
如何解决主从时延问题(方案主要还是依据业务场景)
1.强制将读请求路由到主库处理。
2.根据业务场景延迟读取
分库分表
分库分表主要解决数据库存储量大的问题
分库就是将数据分到不同的数据库中
分表就是将单表数据拆分成多个表比如水平拆分(易企签归档表思路)
引入分库分表带来的主要问题
join 操作 数据在不同的库
事务问题 分布式事务
分布式id
分库分表推荐的方案
当当网的ShardingSphere 项目
