mysql - 为什么数据库读写分离能提高数据库的性能?
问题描述
为什么读写分离可以提高数据库的性能请看上面的博客。根据数据库常识,读写分离确实可以提高数据库的性能,但各位对它的底层原理不知道是否理解。比如,一台读,一台写,但数据仍然需要同步的,不然这个系统就没了意义,那好了,同步的时候难道就不是一个写操作吗?那么实质上不是一样?
问题解答
回答1:但是读的时候不需要同步啊,一台读的性能高,一台写的性能高。读写分离适用与读远大于写的场景。
MySQL 使用了很多的数据库存储引擎,每个引擎既有优点也有缺点。有些不支持事物,但是性能和速度很高;有些读取很快,但是写入很慢,而有些则正好相反;…… 进行主从读写分离可以充分发挥每个数据库引擎的优点。
你的疑问:但数据仍然需要同步的。其实这也不算是同步,因为所有的数据都是单项的。应用层的数据是直接写入主库,但是从库的数据则是从 binlog 恢复的,而且,最重要区别在于主库向从库发送 binlog 是异步的,从库恢复数据也是异步的。
就算是没有从库,那么主库也需要把 binlog 数据写入到硬盘或者其它的电脑,以防止数据库故障。当数据库出现问题后,DBA 也只能从 binlog 中恢复之前的数据。
在你的描述中:“一台读,一台写”。我才你可能是个初学者吧,或者没有参与过真实的项目。真正线上的项目都是 N 台读写,M 台备份。做读写分离后就是 N 台读,N 台写,M 台备份;或者 1 台读,1 台写,M 台备份。
回答2:读写分离的主要目的是分担服务器压力,适用于数据实时性要求不那么严格的业务,可以根据需要分别配置不同的系统参数来应对不同的读写需求,进而提高整个业务系统的整体性能!
相关文章:
1. python - 关于beautifulsoup获取文档内容2. debian - docker依赖的aufs-tools源码哪里可以找到啊?3. docker api 开发的端口怎么获取?4. node.js - ionic2 创建项目 ionic server 报这个错 有朋友可以帮忙看看吗!5. mysql里的大表用mycat做水平拆分,是不是要先手动分好,再配置mycat6. mysql - 如何在数据库里优化 汉明距离 查询?7. dockerfile - 为什么docker容器启动不了?8. python flask做的文件系统上传系统,路径没错,文件列表加载不出来,error 100539. node.js - nodejs连接mysql,输入指令为什么10. python - 《flask web 开发》一书,数据库中多对多关系的实现问题?
