髒數據:可以理解爲臨時值。當事務A更新了數據,但是還未提交時事務B進行了讀取。當事務A出問題進行回滾回原值,那麼事務B已經讀取的就是一個髒數據。
不可重複讀:理解爲在同一事務內的兩次相同查詢返回不同的值。導致原因是這兩次查詢中間被另一個事務修改了數據。重點修改。
幻讀:當事務不是獨立執行時發生的現象。當事務A對錶中所有數據進行了修改或讀取。同時事務B在表中插入數據。那麼會在事務A後感覺還有數據沒有被修改或讀取到的幻覺。重點新增或刪除。
解決:設置隔離級別。
數據層面的鎖:悲觀鎖+樂觀鎖
悲觀鎖:sql+for update。鎖定了所有符合條件的語句。
樂觀鎖:添加version標誌,操作時比較version,成功後更新version。
數據庫拆分:水平拆分+垂直拆分
水平拆分:表結構還是相同的,但是數量減少了,比如500w的表平均拆分10張的話,每張表就只有50w。拆分方式:順序,hash取模,建立映射關係。
垂直拆分:將表結構拆分。如將一個10個字段的表拆成兩張5個字段的表。
讀寫分離
緩存
負載均衡