10
回答
读写分离我有点想不通

上面那个图,读库压力没变啊!!!!!数据复制一样是写入数据啊,读不变啊!为啥说读写分离能提高效率?这不符合逻辑!!!难道他这个数据复制跟写sql不一样?效率高些????

举报
落后君丶
发帖于2个月前 10回/680阅
共有10个答案 最后回答: 2个月前
既要读又要写,cpu可能就上去了,通常读操作比较多,会成为数据传输带宽或者cpu瓶颈。分离的话,通常不在同一服务器上,所以读取压力可以通过读服务器承担,可以横向扩展读服务器来提升读性能

你提的有一点:难道他这个数据复制跟写sql不一样?效率高些????这是肯定的,比如oracle就有专门的数据实时同步方案,如OGG、Data Guard之类的。这样同样是写,但是占用的IO、网络开销就异常很大了。

读写分离,从库从主库的数据同步,一般会采用一些基于日志的方式;例如 mysql 的binlog ;oralce 则有 ogg 之类的,这样对于网络带宽虽然是差不多的;但实际上数据库压力是降低的;

这个,还是取决于你的业务。不过大部分业务都是读的操作是写的10倍以上。
所以读写分离,咱们一个一个说

1. 读:当有大量(非常大,大到一个数据库都执行的慢)的读操作时,有多个数据库来分摊,那么读的性能肯定会提升

2. 写:咱们设定,写的操作比读会少很多很多,就那么1个或几个数据库就能写的过来,并且不干扰读的数据库。(复制的I/O操作相比直接在一个数据库上读写开销会小很多)
以上场景建立在读比写多很多的情况下。如果你写操作比读还多,读写分离,,好像也可以的。就是写库比读库还多... 但这个场景就没研究了,不多说

这个是个架构问题,不是个编程问题。

首先读写分离带来的好处是你本来只有一个数据库现在有两个库了,有做过高性能经验人都知道对于共享资源的扩展带来的性能提升,这是一个好处,然后写库往往又叫做实时库,读库是个异步库,需要根据业务来决定使用哪个库,然后就是读库带来的好处了,读库因为没有那么频繁的写入操作(同步过程一般都是批量的),所以可以允许增加更加多维度的索引而不会造成性能的下降,然后还牵扯数据归档,同时可以支持的在线库的存储规模等等。

总之,哪天你的应用的体量上来了,你自然就能明白到底为什么了,这个图并不能说明多少问题

--- 共有 2 条评论 ---
巴林的狗尾草每天好几万?这个不叫啥,得每天几百几千万才能叫做有点儿量,完全不用慌 2个月前 回复
落后君丶小创业公司,以前都是传统项目,一个项目一个库写起来也方便ssm想咋玩咋玩,最近突然来了个旅游的项目说是访问量特别大,说啥app访问量每天几万那种,并发好几百,我一想这不就是读多写少么,所以就想着看看,看了这么些天也看明白一些,不过心里还是有点发虚,经理说找一个架构师带带我们,迟迟不招心里更加发虚,毕竟自己工作还没满两年,其他同事也没这方面经验。头疼!!! 2个月前 回复
顶部