社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

程序员鱼皮 • 5 月前 • 194 次点击  

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

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

回归面试题!

什么是读写分离?

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

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

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

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

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

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

怎么做的?

做法一:代码封装

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

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

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

做法二:使用中间件

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

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

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

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

最后

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

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

我是鸭鸭,我们下期见~

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/172577
 
194 次点击