什么是数据库的读写分离

什么是数据库的读写分离,第1张

数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。对于大访问量的网站,一般会采用读写分离,比如ebay的读写比率是260:1,也就是大型的电子商务网站的。网上看到说采用读写分离有如下工具:1,oracle的logical standby2, Quest公司的SharePlex3, DSG公司的RealSyncMySQLReplication可以将master的数据复制分布到多个slave上,然后可以利用slave来分担master的读压力。那么对于前台应用来说,就要考虑如何将读的压力分布到多个slave上。如果每个应用都需要来实现读写分离的算法,一则成本太高,二来如果slave增加更多的机器,应用就要随之修改。明显的,如果在应用和数据库间加一个专门用于实现读写分离的中间层,则整个系统的架构拥有更好的扩展性。MySQLProxy就是这么一个中间层代理,简单的说,MySQLProxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQLProxy是完全透明的,应用则只需要连接到MySQLProxy的监听端口即可。

读写分离主要目的是提高系统吞吐量。某些网站同一时间有大量的读 *** 作和较少的写 *** 作。同时,读 *** 作对数据的实时性要求并没有那么高。在此前提下,可以这么设计解决方案。

所以你问题里“数据仍然需要同步”这个理解是不对的。事实上,正是由于允许用户读到几秒钟甚至几分钟前的数据,才可以使用读写分离的。

数据库里面concurrency control是最复杂的组件之一。因为transaction是原子性的,但要保证原子性就得上锁,要不然读写 *** 作之间就有inconsistency。为了减少锁的代价,数据库往往会提供多种consistency level供选择。

而如果读写分离了,那么只读 *** 作的那些服务器就完全不需要考虑锁的问题了,完全可以选哪个最低代价的consistency level。只有执行写 *** 作的服务器需要用强的consistency level。虽然读服务器也需要隔一段时间更新一下,但只有更新时才需要加锁。

所以这种方案其实就是以数据的时效性,换取了读 *** 作的吞吐率。

首先声明一点,读写分离只有在读多写少的场景下才能提高性能。

一方面读写分离都是1写+N读的实现,因此READ *** 作可以分散到多台服务器上,性能自然提高。

另一方面,在一个数据库实例下,同表数据经常会遇到锁等待,WRITE时所有的READ *** 作被阻塞,将读写分离,可以很大程度上减轻这种情况。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9575772.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存