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


讀寫分離: 為保證數據庫數據的一致性,我們要求所有對於數據庫的更新操作都是針對主數據庫的,但是讀操作是可以針對從數據庫來進行。大多數站點的數據庫讀操作比寫操作更加密集,而且查詢條件相對復雜,數據庫的大部分性能消耗在查詢操作上了。

主從復制數據是異步完成的,這就導致主從數據庫中的數據有一定的延遲,在讀寫分離的設計中必須要考慮這一點。以博客為例,用戶登錄后發表了一篇文章,他需要馬上看到自己的文章,但是對於其它用戶來講可以允許延遲一段時間(1分鍾/5分鍾/30分鍾),不會造成什么問題。這時對於當前用戶就需要讀主數據庫,對於其他訪問量更大的外部用戶就可以讀從數據庫。

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

因此:

我的想法是要使用讀寫分離來實現系統吞吐量的提升就要從業務上想辦法降低一致性的要求。

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





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM