數據庫讀寫分離和數據一致性的衝突

讀寫分離: 爲保證數據庫數據的一致性,咱們要求全部對於數據庫的更新操做都是針對主數據庫的,可是讀操做是能夠針對從數據庫來進行。大多數站點的數據庫讀操做比寫操做更加密集,並且查詢條件相對複雜,數據庫的大部分性能消耗在查詢操做上了。數據庫

主從複製數據是異步完成的,這就致使主從數據庫中的數據有必定的延遲,在讀寫分離的設計中必需要考慮這一點。以博客爲例,用戶登陸後發表了一篇文章,他須要立刻看到本身的文章,可是對於其它用戶來說能夠容許延遲一段時間(1分鐘/5分鐘/30分鐘),不會形成什麼問題。這時對於當前用戶就須要讀主數據庫,對於其餘訪問量更大的外部用戶就能夠讀從數據庫。 緩存

  • 適當放棄一致性:在一些實時性要求不高的場合,咱們適當放棄一致性要求。這樣就能夠充分利用多種手段來提升系統吞吐量,例如頁面緩存、分佈式數據緩存、數據庫讀寫分離、查詢數據搜索索引化。
  • 能夠經過程序控制,將強一致性要求的功能(好比存錢、取錢)的讀寫操做均指向主數據庫,或者將寫操做採用「雙寫」的方式實現;而弱一致性(最終一致性)要求的功能(好比更新微博(寫)、金融查詢帳戶(讀))實現讀寫分離。

 

所以:異步

個人想法是要使用讀寫分離來實現系統吞吐量的提高就要從業務上想辦法下降一致性的要求。分佈式

對必需要有一致性的功能是沒法進行讀寫分離的,能夠採用多庫不區分讀寫以及memcache緩存技術來實現。性能