讀寫分離的資料一致性問題

2022-08-11 03:24:12 字數 505 閱讀 5730

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

主從複製資料是非同步完成的,這就導致主從資料庫中的資料有一定的延遲,在讀寫分離的設計中必須要考慮這一點。以部落格為例,使用者登入後發表了一篇文章,他需要馬上看到自己的文章,但是對於其它使用者來講可以允許延遲一段時間(1分鐘/5分鐘/30分鐘),不會造成什麼問題。這時對於當前使用者就需要讀主資料庫,對於其他訪問量更大的外部使用者就可以讀從資料庫。

適當放棄一致性:在一些實時性要求不高的場合,我們適當放棄一致性要求。這樣就可以充分利用多種手段來提高系統吞吐量,例如頁面快取、分布式資料快取、資料庫讀寫分離、查詢資料搜尋索引化。

可以通過程式控制,將強一致性要求的功能(比如存錢、取錢)的讀寫操作均指向主資料庫,或者將寫操作採用「雙寫」的方式實現;而弱一致性(最終一致性)要求的功能(比如更新微博(寫)、金融查詢賬戶(讀))實現讀寫分離。

CAS解決資料一致性問題

什麼是cas?compare and set cas 是一種常見的降低讀寫鎖衝突,保證資料一致性的方法。資料一致性是我們開發時必須注意的問題,特別涉及到錢這塊。這裡舉乙個使用者購物的例子 現有乙個使用者資訊表user account,表中字段為id,uid,amount。表中現有使用者甲,餘額100...

Redis Mysql 讀寫一致性問題

如果不能正確的處理 redis 和 mysql 的讀寫邏輯很容易出現髒讀,從而導致造成一些不必要的風險,如在插入資料時,先寫redis在寫db,如果失敗會回滾,此時redis的資料是無效的資料從而造成髒讀 在讀取資料時,我們遵守先從redis中讀取資料,如果redis不存在,再到db中去讀資料。在向...

sqoop 匯出時資料一致性問題

sqoop 底層執行的其實是map 任務,預設4個map 如果4個map中有兩個map失敗了,但是另外兩個是成功的。這個時候匯入進mysql中的資料是不正確的,重新再導一次全部任務都成功,這兩次的資料會不一致。為了保證匯出的時候資料是一致的sqoop有兩個引數配合使用 sqoop 匯出時並不會自動建...