面试连环炮系列(二十八):数据库读写分离的目的是什么?

2年前 (2022) 程序员胖胖胖虎阿
186 0 0

1. 数据库读写分离的目的是什么?

通常业务系统是读多写少,读写分离是将对数据库的读写操作分散到不同的节点上,能够小幅提升写性能,大幅提升读性能。通常采用数据库一主多从的方式,主库可以读写,从库只读。

2. 读写分离会带来什么问题?如何解决?

主库和从库的数据存在延迟。比如写完主库之后,主库的数据同步到从库是需要时间的,这个时间差就导致了主库和从库的数据不一致性问题。解决办法是在不能忍受延迟的场景强制读主库。

3. MySQL主从复制的原理清楚吗?

  • 主库将数据库中数据的变化写入到 binlog
    从库连接主库。
  • 从库会创建一个I/O线程向主库请求更新的 binlog。
  • 主库会创建一个 binlog dump 线程来发送 binlog ,从库中的 I/O 线程负责接收。
  • 从库的 I/O 线程将接收的 binlog 写入到 relay log 中。
  • 从库的 SQL 线程读取 relay log 同步数据本地(也就是再执行一遍 SQL )。

4. 读写分离具体怎么实施呢?

常用组件有下面2个:

  • Sharding-JDBC:定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
  • MyCat:实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分库分表,配合数据库的主从模式还可实现读写分离。

参考(摘抄的文字版权属于原作者):

https://javaguide.cn/high-performance/read-and-write-separation-and-library-subtable.html
https://time.geekbang.org/column/article/77636
https://zhuanlan.zhihu.com/p/66245006
https://www.codingbrick.com/archives/546.html

相关文章

暂无评论

暂无评论...