读写分离主要目的是提高系统吞吐量。某些网站同一时间有大量的读 *** 作和较少的写 *** 作。同时,读 *** 作对数据的实时性要求并没有那么高。在此前提下,可以这么设计解决方案。
所以你问题里“数据仍然需要同步”这个理解是不对的。事实上,正是由于允许用户读到几秒钟甚至几分钟前的数据,才可以使用读写分离的。
数据库里面concurrency control是最复杂的组件之一。因为transaction是原子性的,但要保证原子性就得上锁,要不然读写 *** 作之间就有inconsistency。为了减少锁的代价,数据库往往会提供多种consistency level供选择。
而如果读写分离了,那么只读 *** 作的那些服务器就完全不需要考虑锁的问题了,完全可以选哪个最低代价的consistency level。只有执行写 *** 作的服务器需要用强的consistency level。虽然读服务器也需要隔一段时间更新一下,但只有更新时才需要加锁。
所以这种方案其实就是以数据的时效性,换取了读 *** 作的吞吐率。
mysql读写分离只是减少了服务器的并发读写时候的压力。从而提高高并发或者大量数据读写时候的效率。redis做缓存,类似于hibernate的三级缓存,hibernate三级缓存是用ehcache实现的。缓存的作用你应该明白,是对相同的数据同时做大量 *** 作或者并发 *** 作的时候,先缓存到内存中,来提高访问效率。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)