用过 MySQL 读写分离吗?怎么用

此答案节选自我们最近弄的 面试鸭小程序,更多大厂常问面试题,可以点击下面的小程序进行阅读哈!

目前这个面试刷题小程序刚出,详细可以看这篇文章:这次,终于不用再被八股文吊打了!

回归面试题!

什么是读写分离?

1)读写分离就是读操作和写操作从以前的一台服务器上剥离开来,将主库压力分担一些到从库。

本质上是因为访问量太大,主库的压力过大,单机数据库无法支撑并发读写。

然后一般而言读的次数远高于写,因此将读操作分发到从库上,这就是常见的读写分离。

2)读写分离还有个操作就是主库不建查询的索引,从库建查询的索引。

因为索引是需要维护的,比如你插入一条数据,不仅要在聚簇索引上面插入,对应的二级索引也得插入,修改也是一样的。

所以将读操作分到从库了之后,可以在主库把查询要用的索引删了,减少写操作对主库的影响。

怎么做的?

做法一:代码封装

讲白了就是代码层面抽出一个中间层,由中间层来实现读写分离和数据库连接。

就是搞了个代理类,对外暴露正常的读写接口,里面封装了逻辑,将读操作指向从库的数据源,写操作指向主库的数据源。

  • 优点:简单,并且可以根据业务定制化变化,随心所欲。
  • 缺点:如果数据库宕机了,发生主从切换了之后,就得修改配置重启。如果系统是多语言的话,需要为每个语言都实现一个中间层代码,重复开发。

做法二:使用中间件

一般而言是独立部署的系统,客户端与这个中间件的交互是通过 SQL 协议的。

所以在客户端看来连接的就是一个数据库,通过 SQL 协议交互也可以屏蔽多语言的差异。

缺点就是整体架构多了一个系统需要维护,并且可能成为性能瓶颈,毕竟交互都需要经过它中转。

常见的开源数据库中间件有:官方的 MySQL-Proxy、360 的 Atlas、ShardingSphere、Mycat 等。

最后

最后再推荐下鸭鸭目前努力在做面试小程序神器,已经有 3000 多道面试题目啦,欢迎大家来阅读!如果大家有不会的面试题,也可以在小程序内反馈!鸭鸭会第一时间为大家解答!

除了小程序版本,我们 web 端也上线啦:www.mianshiya.com

我是鸭鸭,我们下期见~

相关推荐

  • 也曾找工作到崩溃,希望给大家一点慰藉!
  • 一下午连续故障两次,谁把我们接口堵死了?!
  • 清华领衔发布多模态评估MultiTrust:GPT-4可信度有几何?
  • 从裸机到700亿参数大模型,这里有份教程,还有现成可用的脚本
  • 数学大统一理论里程碑进展:几何朗兰兹猜想获证明,论文超800页
  • 击败GPT-4o的开源模型如何炼成?关于Llama 3.1 405B,Meta都写在这篇论文里了
  • Llama成大模型顶流,扎克伯格掀论战:玩开源,时代变了
  • 资料下载:新一代日志存储与分析解决方案
  • 从1到N,标签系统运营常见问题全解析
  • 新一代实时数仓:阿里云数据库 SelectDB 版--100% 兼容 Apache Doris 的全托管云原生实时数仓
  • 如何使用JavaScript获取百分比宽度元素的像素宽度
  • 简单的聊一聊 JavaScript 原型与原型链
  • 博士申请 | 香港理工大学李恒云教授招收大数据/机器学习全奖博士/博后/RA
  • 大模型中文内容安全评测发布,幻方DeepSeek-67B模型夺魁,谷歌7B模型表现亮眼
  • ACM MM 2024 | 揭示文生图扩散模型的结构级记忆,提升成员推理攻击成功率
  • 港大马毅:大模型长期没有理论就像盲人摸象;大佬齐聚激辩AI下一步|2024国际基础科学大会
  • 贾扬清共一论文获ICML时间检验奖:首个开源版AlexNet,著名框架Caffe前身,最佳论文奖也已公布
  • GPT-4o mini登顶大模型竞技场,奥特曼:两个月内微调免费
  • Llama 3.1上线就被攻破:大骂小扎,危险配方张口就来!指令遵循能力强了更容易越狱
  • 北大刘若川教授获拉马努金奖,中国学者4次获此殊荣