weblab-tw / ddia-study-group

Designing Data-Intensive Applications Study Group
36 stars 5 forks source link

第七章節 - 事務:學習要點 #78

Open 0x171-0 opened 2 years ago

0x171-0 commented 2 years ago
kylemocode commented 2 years ago
截圖 2022-07-26 下午8 35 08
AK4codee commented 2 years ago

ACID

弱隔離級別

讀己提交

資料庫透過使用 行鎖(row-level lock) 來防止髒寫:當事務想要修改特定物件(行或文件)時,它必須首先獲得該物件的鎖。然後必須持有該鎖直到事務被提交或中止。一次只有一個事務可持有任何給定物件的鎖;如果另一個事務要寫入同一個物件,則必須等到第一個事務提交或中止後,才能獲取該鎖並繼續。

jxiu0129 commented 2 years ago
Parkerhiphop commented 2 years ago
  1. Transaction 是一個抽象層,允許應用程式假裝某些 Concurrency 問題和某些型別的硬體和軟體故障不存在。
  2. Concurrency Transaction 的 Weak & Strong Isolation Level: Read Committed & Snapshot Isolation / Serializable
  3. Serielizable 的三種實作:Actual Serial Execution, Two-Phase Lock, Serializable Snapshot Isolation (SSI)
at7211 commented 2 years ago

Serializable Isolation 有三種實作方式:

REF

samwu4166 commented 2 years ago

ACID

不符合 ACID 標準的系統有時被稱為 BASE,它代表 基本可用性(Basically Available),軟狀態(Soft State) 和 最終一致性(Eventual consistency)。

髒讀 - 一個事務讀取另一個事務的未被執行的寫入 在關係型資料庫中,通常基於客戶端與資料庫伺服器的 TCP 連線:在任何特定連線上,BEGIN TRANSACTION 和 COMMIT 語句之間的所有內容,被認為是同一事務的一部分。

沒有原子性,錯誤處理就要複雜得多,缺乏隔離性,就會導致併發問題

物件關係對映(ORM, object-relation Mapping) 框架不會重試中斷的事務 —— 這個錯誤通常會導致一個從堆疊向上傳播的異常,所以任何使用者輸入都會被丟棄,使用者拿到一個錯誤資訊。

JimmyFUFU commented 2 years ago
Jay0328 commented 2 years ago

Transaction

ACID

Isolation Level

Issues

image image source

Serializable 3 Implementation Methods