开发者学堂课程【Java面试疑难点串讲5:系统架构及项目设计:读、写分离】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/28
读、写分离
阿里云开发者学院
一、关于读、写性能
1、读、写分离的概念
读写分离就是让主库处理事务性查询,从库处理select查询。数据库复制被用来把事务性查询导致的数据变更同步到从库,当然,主库也可以select查询。
读写分离最大的作用就是缓解服务器的压力。
2、读写分离的好处
●增加冗余;
●缓解服务器的压力;增加机器的处理能力;
●对于读应用较多的,应用读写分离是最好的,可以确保写的服务器压力更小,而读的服务器又可以接受点时间上的延迟。
3、读写分离提高性能
3.1.物理服务器增加;负荷增加;
3.2.主库和从库只负责自己的写和读操作,极大的缓解了X锁和S锁;
3.3.从库可以配置为myisam引擎,提高读的性能及节省系统开销;
3.4.从库同步主库的数据和主库直接写还是有区别的,从库是通过主库发来的binlog来同步的,但是呢,区别在于主库向从库发送binlog是异步的,所以同步数据也是异步的。
3.5.读写分离适用于读的操作应用较多的场景,如果只有一台服务器,当select很多时,update和delete会被select的访问堵塞,这时就需要等待select结束,并发性能不高;当读和写比例相近时,可以设置成互为主从。
3.6.分摊读写,这个就是拿机器数量去换性能。
3.7.增加冗余,提高容错,当主故障时,可以迅速地把从切换为主来使用。
在设计的时候需要考虑到数据库的读、写分离,此种考虑需要根据实际业务要求来看,不能凭空设计。
oracle架构:
●信息的汇总表,同时为了保证查询性能,需要增加索引,但是这张表平均每1秒要更新1000次,这就个索引产生了冲突,所以定义这两张表,一张表作为更新使用,另外一张表在系统安静下来之后进行差异的备份,而后进行数据保存。这样的话就各自保证性能,但是前提这是一个特别简单的架构,这个简单的架构在整个设计过程之中实际上是作为中小型项目的开发,是可以通过它来解决实际问题的。
以上是在WEB2.0以前的概念,从WEB2.0的时代开始(AJAX开始)数据将开始暴增,于是就被要求对系统进行大规模的升级:要求保证更新速度,要求保证实时性,要求保证数据的有效性。
如果这个时候所有的设计还是围绕着传统的关系型数据库展开的,那一定是会
失败的。