資料一致性處理

2021-09-13 15:43:18 字數 979 閱讀 2980

資料一致性處理

當多個程序同時操作同乙個資料,會產生資源爭搶,資料一致性的問題。

高併發情況下,涉及到寫操作時,不可能直接運算元據庫,大併發的連線會導致mysql請求會阻塞,比如大量的insert update 請求到,會直接導致無數的行鎖和表鎖,甚至最後堆積很多,從來觸發too many connections 錯誤。

web伺服器 nginx和apache連線的程序有限,cpu上下文程序切換也會增加額外的開銷,所以響應一定快。

這時可以採用

高併發下的資料安全,防超發,以搶票系統為例:

(1)訊息佇列:

將票數資源存在redis中,將請求存入訊息佇列(redis下的list阻塞的,可以實現訊息佇列,還可以實現優先訊息佇列)中,依次處理。缺點 :這樣會處理比較慢,等待時間比較長。

:對於讀操作是否也進入佇列,這個問題根據具體的場景,像12306應該是不在佇列中或者是優先排在最前面的,因為只是讀,要求塊。 

(2)加鎖

常見的鎖:        排它鎖;樂觀鎖;悲觀鎖;

排他鎖:在進行寫時,禁止一切的讀和寫;

樂觀鎖:認為在寫的時候,別人不在寫,維護乙個version號,等處理後對照version好,一致則對,否則回滾,操作不成功,

悲觀鎖:認為在寫的時候,別人也在寫。採用資料庫提供的鎖機制:在寫操作的時(insert updata 等)myisam預設是鎖表,innodb根據是否是主鍵,主鍵則行鎖,否則表鎖。讀操作,innodb採用mvcc。

可以採用樂觀鎖+回滾:

採用悲觀鎖:

資料一致性

資料一致性通常指關聯資料之間的邏輯關係是否正確和完整。而資料儲存的一致性模型則可以認為是儲存系統和資料使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統所承諾的訪問結果。常用的一致性模型有 a 嚴格一致性 linearizability,strict atomic consistency ...

資料一致性

丟失更新 未確定的相關性 不一致的分析和幻想讀 事務a讀取與搜尋條件相匹配的若干行。事務b以插入或刪除行等方式來修改事務a的結果集,然後再提交。幻讀是指當事務不是獨立執行時發生的一種現象,例如第乙個事務對乙個表中的資料進行了修改,比如這種修改涉及到表中的 全部資料行 同時,第二個事務也修改這個表中的...

資料一致性

資料一致性通常指關聯資料之間的邏輯關係是否正確和完整。而資料儲存的一致性模型則可以認為是儲存系統和資料使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統所承諾的訪問結果。常用的一致性模型有 a 嚴格一致性 linearizability,strict atomic consistency ...