读写分离主要目的是提高系统吞吐量。某些网站同一时间有大量的读 *** 作和较少的写 *** 作。同时,读 *** 作对数据的实时性要求并没有那么高。在此前提下,可以这么设计解决方案。
所以你问题里“数据仍然需要同步”这个理解是不对的。事实上,正是由于允许用户读到几秒钟甚至几分钟前的数据,才可以使用读写分离的。
数据库里面concurrency control是最复杂的组件之一。因为transaction是原子性的,但要保证原子性就得上锁,要不然读写 *** 作之间就有inconsistency。为了减少锁的代价,数据库往往会提供多种consistency level供选择。
而如果读写分离了,那么只读 *** 作的那些服务器就完全不需要考虑锁的问题了,完全可以选哪个最低代价的consistency level。只有执行写 *** 作的服务器需要用强的consistency level。虽然读服务器也需要隔一段时间更新一下,但只有更新时才需要加锁。
所以这种方案其实就是以数据的时效性,换取了读 *** 作的吞吐率。
首先声明一点,读写分离只有在读多写少的场景下才能提高性能。一方面读写分离都是1写+N读的实现,因此READ *** 作可以分散到多台服务器上,性能自然提高。
另一方面,在一个数据库实例下,同表数据经常会遇到锁等待,WRITE时所有的READ *** 作被阻塞,将读写分离,可以很大程度上减轻这种情况。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)