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