update last merged PR

This commit is contained in:
Gang Yin 2021-12-15 10:09:42 +08:00
parent fa1ada4a0b
commit 48c792c996
2 changed files with 3 additions and 3 deletions

2
ch7.md
View File

@ -293,7 +293,7 @@ SELECT COUNT*FROM emails WHERE recipient_id = 2 AND unread_flag = true
**图7-6 读取偏差Alice观察数据库处于不一致的状态**
爱丽丝在银行有1000美元的储蓄分为两个账户每个500美元。现在一笔事务从她的一个账户转移了100美元到另一个账户。如果她在事务处理的过程中非常不幸的查看其账户余额列表她可能会在收到付款之前看到一个账户余额余额为500美元在发出转账后看到另一个账户余额新余额为400美元。对爱丽丝来说现在她的账户似乎总共只有900美元——看起来有100美元已经凭空消失了。
爱丽丝在银行有1000美元的储蓄分为两个账户每个500美元。现在一笔事务从她的一个账户转移了100美元到另一个账户。如果她非常不幸地在事务处理的过程中查看其账户余额列表,她可能会在收到付款之前看到一个账户余额(收款账户,余额为500美元在发出转账看到另一个账户余额(付款账户,新余额为400美元。对爱丽丝来说现在她的账户似乎总共只有900美元——看起来有100美元已经凭空消失了。
这种异常被称为**不可重复读nonrepeatable read** 或**读取偏差read skew**如果Alice在事务结束时再次读取账户1的余额她将看到与她之前的查询中看到的不同的值600美元。在读已提交的隔离条件下**不可重复读**被认为是可接受的Alice看到的帐户余额时确实在阅读时已经提交了。

View File

@ -144,7 +144,7 @@ SELECT COUNT*FROM emails WHERE recipient_id = 2 AND unread_flag = true
但如果郵件太多,你可能會覺得這個查詢太慢,並決定用單獨的欄位儲存未讀郵件的數量(一種反規範化)。現在每當一個新訊息寫入時,必須也增長未讀計數器,每當一個訊息被標記為已讀時,也必須減少未讀計數器。
在[圖7-2](../img/fig7-2.png)中使用者2 遇到異常情況:郵件列表裡顯示有未讀訊息,但計數器顯示為零未讀訊息,因為計數器增長還沒有發生[^ii]。隔離性可以避免這個問題透過確保使用者2 要麼同時看到新郵件和增長後的計數器,要麼都看不到。反正不會看到執行到一半的中間結果。
在[圖7-2](../img/fig7-2.png)中使用者2 遇到異常情況:郵件列表裡顯示有未讀訊息,但計數器顯示為零未讀訊息,因為計數器增長還沒有發生[^ii]。隔離性可以避免這個問題透過確保使用者2 要麼同時看到新郵件和增長後的計數器,要麼都看不到,而不是一個前後矛盾的中間結果。
[^ii]: 可以說郵件應用中的錯誤計數器並不是什麼特別重要的問題。但換種方式來看,你可以把未讀計數器換成客戶賬戶餘額,把郵件收發看成支付交易。
@ -293,7 +293,7 @@ SELECT COUNT*FROM emails WHERE recipient_id = 2 AND unread_flag = true
**圖7-6 讀取偏差Alice觀察資料庫處於不一致的狀態**
愛麗絲在銀行有1000美元的儲蓄分為兩個賬戶每個500美元。現在一筆事務從她的一個賬戶轉移了100美元到另一個賬戶。如果她在事務處理的同時檢視其賬戶餘額列表她可能會碰巧在收款到達前看到收款賬戶的餘額仍然是500美元而在付款產生後看到付款賬戶的餘額已經是400美元。對愛麗絲來說現在她的賬戶似乎總共只有900美元——看起來有100美元已經憑空消失了。
愛麗絲在銀行有1000美元的儲蓄分為兩個賬戶每個500美元。現在一筆事務從她的一個賬戶轉移了100美元到另一個賬戶。如果她非常不幸地在事務處理的過程中檢視其賬戶餘額列表她可能會在收到付款之前先看到一個賬戶的餘額收款賬戶餘額仍為500美元在發出轉賬之後再看到另一個賬戶的餘額付款賬戶新餘額為400美元。對愛麗絲來說現在她的賬戶似乎總共只有900美元——看起來有100美元已經憑空消失了。
這種異常被稱為**不可重複讀nonrepeatable read** 或**讀取偏差read skew**如果Alice在事務結束時再次讀取賬戶1的餘額她將看到與她之前的查詢中看到的不同的值600美元。在讀已提交的隔離條件下**不可重複讀**被認為是可接受的Alice看到的帳戶餘額時確實在閱讀時已經提交了。