数据库读写分离和数据一致性的冲突

读写分离: 为保证数据库数据的一致性,咱们要求全部对于数据库的更新操做都是针对主数据库的,可是读操做是能够针对从数据库来进行。大多数站点的数据库读操做比写操做更加密集,并且查询条件相对复杂,数据库的大部分性能消耗在查询操做上了。数据库

主从复制数据是异步完成的,这就致使主从数据库中的数据有必定的延迟,在读写分离的设计中必需要考虑这一点。以博客为例,用户登陆后发表了一篇文章,他须要立刻看到本身的文章,可是对于其它用户来说能够容许延迟一段时间(1分钟/5分钟/30分钟),不会形成什么问题。这时对于当前用户就须要读主数据库,对于其余访问量更大的外部用户就能够读从数据库。 缓存

  • 适当放弃一致性:在一些实时性要求不高的场合,咱们适当放弃一致性要求。这样就能够充分利用多种手段来提升系统吞吐量,例如页面缓存、分布式数据缓存、数据库读写分离、查询数据搜索索引化。
  • 能够经过程序控制,将强一致性要求的功能(好比存钱、取钱)的读写操做均指向主数据库,或者将写操做采用“双写”的方式实现;而弱一致性(最终一致性)要求的功能(好比更新微博(写)、金融查询帐户(读))实现读写分离。

 

所以:异步

个人想法是要使用读写分离来实现系统吞吐量的提高就要从业务上想办法下降一致性的要求。分布式

对必需要有一致性的功能是没法进行读写分离的,能够采用多库不区分读写以及memcache缓存技术来实现。性能