面试官问:在读多写少的情况下,如果优化 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 长江的美丽变奏 7983302
- 2 中央一号文件:推进农村高额彩礼治理 7978175
- 3 DeepSeek预测《哪吒2》最终票房 7861542
- 4 小包裹折射中国经济澎湃动能 7760653
- 5 不允许城镇居民到农村买农房、宅基地 7637879
- 6 泽连斯基:愿为和平放弃总统职位 7508620
- 7 马库斯被北京的空气质量震惊了 7440626
- 8 终于有部剧还原了我的高清童年 7398049
- 9 王曼昱4比0胜孙颖莎 首夺亚洲杯冠军 7206564
- 10 宝马行驶中突发无电滑行 车主发声 7148910