大家好,欢迎来到IT知识分享网。
什么是读写分离
读写分离就是将数据库分为主从库,一个主库(Master)用于写数据,多个从库(Slaver)进行轮询读取数据的过程。
主从库之间通过某种通讯机制进行数据的同步,是一种常见的数据库架构。
为什么要读写分离呢?
因为数据库的“写”,比如:10000条数据到oracle可能要3分钟,操作是比较耗时的。
但是数据库的“读”,比如:从oracle读10000条数据可能只要5秒钟,相对应写就没有这么耗时。
所以读写分离解决的是:把数据库的写入与查询,在服务器上分开来,从而可以极大的提升查询效率。
什么时候要读写分离?
数据库不一定要读写分离,但是如果程序使用数据库较多时,而更新少,查询多的情况下就可以考虑使用。
这样可以减少数据库压力,提高性能,当然数据库也有其它优化方案,比如:分库分表,或是搜索引擎等都是解决方法。
读写分离的原理
读写分离基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。
读写分离是为了将请求流量分散到不同的数据库节点上,将写入数据的请求分发到主数据库,读取数据的请求分发到从数据库,从数据可以有多台,即一主多从。
整体架构如下图:
从上图可看出,有个关键技术就是主从复制,每次写入数据的时候,需要将主服务器数据复制到从服务器中,用来确保数据一致性。
下面我以MySQL的主从复制为例,如下图所示:
主从复制
- 从服务器连接上主服务器,启动复制的时候,则会自身创建一个IO线程去像主数据库服务器拉取binlog的更新信息。
- 把拉过来的binlog信息写到自己服务器的一个relay log日志文件中。
- 从数据库服务器创建一个SQL线程,是为了将relay log的所有日志信息,进行sql回写到自己的数据库中,这样就和主库的数据一模一样了。
- 当主数据库有数据更新的时候,比如新插入了一条或者update了一条数据,这时候主库会将这些数据更新到binlog二进制文件中,同时,主库会创建一个binlog dump线程,这个线程将更新了的binlog信息发送到从库的IO线程,需要注意的是,这个过程是异步的,如果等着从库接受完成,是不是特别慢,且影响性能。
读写分离总结
在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的,无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。
因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力,即可以解决可用性的问题,又解决了数据库性能问题。
-end-
关于作者
陈睿|mikechen 10年+大厂架构经验,专注于互联网架构技术。
文章来源:https://mikechen.cc
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/166703.html