面试官问:在读多写少的情况下,如果优化 MySQL 的数据查询方案




binlog 的写入:MySQL 主库在收到客户端提交事务的请求后,会先把相关操作写入 binlog,然后再提交事务,更新存储引擎中的数据,事务提交完成后,返回给客户端操作成功的响应; binlog 的同步:MySQL 从库会创建一个专门的 I/O 线程,它会连接主库的 log dump 线程,从主库接收 binlog 日志文件,然后把 binlog 信息写入本地的 relay log 中继日志文件中,最后返回复制成功的响应给主库; binlog 的回放:同时,从库会创建一个专门回放 binlog 的线程,它会读取 relay log 中继日志,然后回放 binlog 从而更新存储引擎中的数据,最终实现主从数据的复制和一致性。

数据放到缓存中:在数据写入主库的同时,也写到缓存(例如 Redis)中,而读取数据时,优先从缓存中读取。不过这种方案存在缓存和数据库一致性的问题,不过这个属于另外一个范畴了,也存在解决方案,这里就不细说了。 读主库:通常情况下,我们是禁止读主库的,因为主库存在写请求,会锁行,如果查询的数据量很大且频繁时,会影响读请求的执行,最终对主库造成较大的压力。所以这个方案的执行要谨慎考虑。
自己改造代码,判断 SQL 语句是读还是写,从而将这条语句发送到对应的数据源(主库或者从库)中进行处理 部署代理中间件,例如 MyCat,由中间件来处理读写分离,此种方式对对开发者透明,缺点是会增加 SQL 请求的链路长度,增加网络调用的开销 使用内嵌到服务中的分库分表组件,例如 Sharding JDBC,该组件会代理所有的数据库请求,自动将请求路由到对应数据库实例上。


☞cURL 原作者收到死亡恐吓邮件!
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 习近平同马克龙交流互动的经典瞬间 7904055
- 2 黑龙江水库冰面下现13匹冰冻马 7808318
- 3 微信表情包戒烟再度翻红 7713390
- 4 2025你的消费习惯“更新”了吗 7618750
- 5 三星堆与秦始皇帝陵竟有联系 7520639
- 6 为啥今年流感如此厉害 7425228
- 7 劲酒如何成了年轻女性的神仙水 7328816
- 8 郭美美、王子柏被点名 7233743
- 9 中美合拍《我的哪吒与变形金刚》首播 7142714
- 10 中疾控流感防治七问七答 7048858








CSDN
