發表文章

目前顯示的是有「Database」標籤的文章

什麼是Database的ACID與一致性問題

目的 介紹ACID,並且針對其中的C(Consisitency)一致性提出常見的問題與解決問題的Lock用法 ACID 資料庫的ACID基本上就是四個字首的縮寫分別是 ATOMICITY CONSISTENCY ISOLATION DURABILITY 在開始進入文章前需要先講解一個概念Transaction(交易/事務),Transaction代表著你的程式在這個過程中對資料庫做的操作 舉例: 今天會員購買了這個產品,則程式會對資料庫做一系列的操作包含 新增訂單資料 新增會員與訂單的關聯資料 更新商品銷售資料 則這系列的操作可稱為一個Transaction 若是以Java Spring中的Annotation來講解的話,若在method上標記Transaction則Spring會幫助你判斷此method中對資料庫的操作都為一個Transaction。 ATOMICITY (原子性) 一個Transaction中的全部操作被視為不可分割,代表要就全部完成或是全部取消。若是其中一個環節失敗則會全部回滾(Rollback)到此資料庫Transaction前的狀態。 原子性確保了資料庫的可使用性,當然當資料不再準確時資料庫基本上也不可以使用了 CONSISTENCY (一致性) 其實目前我對於網路上一致性的解釋上有些許混亂,網路上有兩種說法可能是與CAP理論的C一起解釋了,如何選擇就由客官們判斷了 資料庫在Transaction執行後資料都必須符合schema的規範,例如要執行Trigger或是constraint(Not null/Unique) 資料庫每個Transaction讀取一個數據的解果都是一樣的 第二個說法的補充 當資料滿足了原子性與隔離性,那在同步進行Transaction時,就算其中一個Transaction 提前完成,那資料也是可以滿足一致性的 ISOLATION (隔離性) Transaction在確定提交以前,是看不到其他Transaction對這個資料的操作。 DURABILITY (持久性) 一但Transaction提交後,其作的修改將會永遠存在Database之中不能遺失 常見的一致性問題 現在各語言框架通常都已經將資料庫操作包裝好都符合ACID原則,開發者只要呼叫API即可使用,...