[Day3] 讀 RDBMS 課程 2019 — Race Condition

By Triton Ho

R4 Cheng
Aug 21, 2023

At Lesson 1: Page 1 — Page 13

Notes

Why is isolation important?

  • 正規化的基礎訓練,能讓你設計系統時能跟蹤前人的智慧,而不是自行發明看起來沒問題的演算法
  • 避免 race condition

為了最大化效能, RDBMS 會同時處理盡量多的 TX

Race Condition

Race Condition 的必需條件

1. 同一資源會被同時改動

2. 「檢查」和「資料改動」不是在同一 Atomic operation 中完成

註:這是假設有 atomic WRITE 的情況下

Safe Case 1

  • 讓同一航班所有資料改動都要先拿到該航班 WRITE LOCK ,改動完成後便解除 WRITE LOCK => Eg. Zookeeper Redis
  • 缺點: WRITE LOCK 的伺服器可能會當機

Safe Case 2

  • 為每一航班建立對應的 Queue ,並且,對同一航班的改動,必須先把工作放到對應的 Queue ,然後單線程順序執行
  • 因為同一時間只有一個線程正在改動同一份資料,所以不會發生 Race condition
  • 缺點: need MQ Server, worker, server push…(麻煩), Some scenarios do not fit (eg. money transfer)

Safe Case 3

  • 善用 RDBMS 的 Atomicity 還有 Isolation
Update seats set user = $user
where flight_no='BR855' and flight_date = '16SEP' and user IS NULL;
<!-- user IS NULL is important -->

Use AffectedRowCount to check it

  • Keyword: atomic check-and-set

--

--

R4 Cheng
R4 Cheng

Written by R4 Cheng

「0」が過去で「1」が未来「今」は何処にもない

No responses yet