
1. 基礎思想
1.1. 預寫日志記錄
1.2. 兩階段提交
1.3. 關系資料庫
2. 兩個事實
2.1. 計算機程式會崩潰
2.1.1. 當一個程式崩潰時,它會丟掉所有正在處理的東西
2.1.2. 只有安放在計算機檔案系統中的資訊會得到保存
2.1.3. 崩潰相當寬泛:包括任何可能導致計算機停止運行進而損失資料的事
2.1.3.1. 可能的事件包括斷電、硬碟出錯、其他硬體出錯,以及作業系統或應用程式中的漏洞
2.1.4. 即便這些泛指的崩潰極少發生,一些資料庫也不能承受崩潰的風險
2.1.4.1. 銀行、保險公司和其他資料代表實際金錢的組織,這些組織不能承受任何情況下記錄中出現不一致性的風險
2.2. 硬碟和閃存條等計算機存盤設備一次只能寫入少量資料
2.2.1. 基本上在500個字符左右
2.2.2. 現代設備每秒能執行成千上萬次這種500個字符的寫入操作
2.2.2.1. 現實是磁盤內容每次只能改變數百個字符
2.2.3. 通常來說,對任何一個大小合理的資料庫而言,更改兩行的確需要兩次單獨的磁盤操作
3. 交易處理中的兩個主要問題
3.1. 高效性
3.2. 可靠性
4. 一致性
4.1. Consistency
4.2. 資料庫中的資訊并不自相矛盾
4.3. 存在不一致性非常有害且不能為自動化工具糾正的情況
4.3.1. 銀行轉賬
5. 預寫日志記錄
5.1. “待辦事項表把戲”
5.1.1. To-do List Trick
5.2. 基本思想
5.2.1. 維護一個資料庫計劃采取的動作日志
5.2.1.1. 日志被存盤在硬碟或其他一些永久性存盤介質中
5.2.1.1.1. 日志中的資訊就能幸免于崩潰和重啟
5.2.1.2. 在一項事務的任何動作得到執行前,它們都被記錄在日志中,然后再被保存到磁盤里
5.2.1.3. 如果事務成功完成,我們就能洗掉日志中的待辦事項串列,進而節省一些空間
5.2.2. 冪等
5.2.2.1. idempotent
5.2.2.2. 資料庫日志中創建的每一項都有相同的效果,不管日志被執行一次、兩次,還是更多次
5.2.2.3. 在從崩潰中恢復后,資料庫只需重新執行任一完整事務的日志活動即可,而且處理不完整事務也變得很容易了
5.2.2.4. 任何不以“終止事務”項結束的日志活動會按照相反順序撤銷,讓資料庫恢復事務未開始前的狀態
5.3. 能阻止不一致性
5.3.1. 排除了資料損壞,但并未消除資料丟失
6. 事務
6.1. 吉姆·格雷(Jim Gray)
6.1.1. 1992年首次出版
6.1.2. 《事務處理:概念與技術》(Transaction Processing:Concepts and Techniques
6.1.3. “容錯”(Fault-tolerance)
6.2. 不管事務是完成還是“回滾”,資料庫仍然能保持一致性
6.3. 每一筆事務都是原子態(Atomic)
6.4. 一筆原始態的事務不能被分成更小的操作
6.4.1. 要么整筆事務成功地完成,要么資料庫處于其原始狀態,就像事務從未開始一般
6.5. 事務能“鎖定”單行或單列,或整張表
6.5.1. 一旦該項事務成功完成,就會“解鎖”之前被它“鎖定”的所有資料
6.5.2. 之后,其他事務就能更改之前被“凍結”的資料
6.6. 事務經常因為不可預料的原因而不能完成
6.6.1. 有時候資料庫事務必須被取消,這被稱為“回滾”或“放棄”一次事務
6.7. 如果一項事務需要“回滾”,資料庫程式只需通過預寫日志(比如待辦事項串列)逆向操作,就能逆轉事務中的每項操作
7. 兩階段提交協議
7.1. “預備提交把戲”
7.1.1. Prepare-thencommit Trick
7.1.2. 在預備階段,“主管”復制品檢查是否所有復制品都能完成事務,
7.1.3. 一旦所有事情都妥當,“主管”復制品就會讓所有復制品提交資料
7.1.4. 在預備階段,其中一個復制品出錯了
7.1.5. “撤銷”階段,其中每個復制品都必須“回滾”事務
7.2. 復制是抵御資料丟失的絕佳方法
7.2.1. 將為朝向阻止任何資料丟失的目標做出巨大努力
7.3. 保有兩份及以上的資料庫拷貝
7.3.1. 每份資料庫拷貝都被稱為復制品(replica)
7.3.2. 所有拷貝的集合被稱為復制資料庫(replicated database)
7.3.2.1. 復制資料庫能隨時保持資料庫的所有拷貝同步
7.3.3. 復制品在地理上是分開的
7.3.3.1. 其中一份復制品被一場災難抹掉,另一份復制品也還在
7.3.3.2. 同一資料庫的多份拷貝被存盤在不同地點
7.4. 鎖定(locking)
7.4.1. 死鎖
7.4.1.1. 許多資料庫都會定期運行偵測死鎖的特殊程式,當發現一個死鎖時,死鎖的其中一項事務會被取消,以便讓另一項事務進行
7.4.1.2. “回滾”能通過對待辦事項串列把戲稍做變更來實作
7.4.1.2.1. 預寫日志必須包含足夠的額外資訊才能在必要時撤銷每次操作
8. 關系資料庫
8.1. 埃德加·科德(E.F.Codd)
8.1.1. 1970年
8.1.2. IBM研究員
8.1.3. 論文《大型共享資料庫資料的關系模型》(A Relational Model of Data for Large Shared Data Banks)
8.2. “虛表把戲”
8.2.1. Virtual Table Trick
8.2.2. 盡管所有的資料庫資訊都能被存盤在一張固定大小的表中,資料庫也能在需要時生成新的臨時表(虛表)
8.3. 基本思想
8.3.1. 每張表都存盤不同的資訊集,但不同表中的個體通常都以某種方式相連
8.3.1.1. 表策略還有另一個巨大優勢,如果表設計無誤,對資料庫的變更會更容易
8.3.1.2. 大量重復(課程細節)和少量重復(課程號)進行了交換,總體而言,這是筆好交易
8.4. 關鍵特征
8.4.1. 資料庫中的資訊有一個預定義結構
8.5. 資料庫能提前計算出需要翻多少“塊”頁,并能記錄每“塊”開始和結束的頁首
8.5.1. 用于快鍵查找的預計算塊集合被稱為“B樹”(B-tree)
9. 備份
9.1. 某個特定時刻對一些資料的快照
9.2. 并不一定是最新的
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/554208.html
標籤:其他
上一篇:02_重要的兩個日志 redo log 和 binlog
下一篇:返回列表
