讀改變未來的九大演算法筆記02_資料庫

来源:https://www.cnblogs.com/lying7/archive/2023/06/03/17453098.html
-Advertisement-
Play Games

![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230602231102469-1389179464.png) # 1. 基礎思想 ## 1.1. 預寫日誌記錄 ## 1.2. 兩階段提交 ## 1.3. 關係資料庫 # 2 ...


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. 並不一定是最新的


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 經常坐地鐵,卻不知道地鐵多少條線路?哪個站下車?今天就帶領大家熟悉並繪製深圳地鐵路線圖。 WPF在繪製矢量圖方面有非常強大的優勢,利用WPF可以繪製出各種矢量圖形,如線,圓,多邊形,矩形,及組合圖形。今天以繪製深圳地鐵路線圖為例,簡述WPF在圖形繪製方面的一些知識,僅供學習分享使用,如有不足之處,還 ...
  • 在本篇博客中,我將介紹如何在WPF應用程式中使用OwinSelfHost和Swagger來創建自托管的Web API。我們將使用WPF作為我們的應用程式界面,OwinSelfHost來自托管我們的Web API,並使用Swagger來為我們的API生成文檔。 首先,確保你的電腦上已安裝了以下組件: ...
  • 哈嘍大家好,我是鹹魚 今天跟大家分享一個使用 Python 的 logging 模塊寫入日誌文件時遇到的許可權問題,不知道你們有沒有遇到過 ## 1.案例現象 今天上班的時候手機簡訊收到了 zabbix 告警,但是發現了不對勁的地方:微信沒有收到告警信息,按理說簡訊跟微信應該是同時收到告警信息的 鹹魚 ...
  • 在我們安裝 VMware 時,VMware 會自動三種 3 種網路連接模式,分別為VMnet0 (橋接模式)、VMnet8 (NAT模式)、VMnet1 (僅主機模式),當然我們也可以根據需要自行創建更多的虛擬網路。 【個人實驗環境】 pc:win11家庭版 虛擬機:VMware Workstati ...
  • AH8670C 是一款內部集成有功率MOSFET管可設定輸出電流的降壓型開關穩壓器。TD:186*4884*3702*V可工作在寬輸入電壓範圍具有優良的負載和線性調整。寬範圍輸入電壓(8V至90V)可提供最大3A電流的高效率輸出,可在移動環境輸入的條件下實現各種降壓型 電源 變換的應用。 安全保護機 ...
  • > 安裝轉載:https://www.cnblogs.com/saryli/p/9729591.html > > 插件轉載:https://blog.csdn.net/nbdclw/article/details/107441772 #### 安裝及配置環境 ##### 第一步:下載並安裝erlan ...
  • 此日海光新至,為其接風飲宴。席間其樂融融,眾CPU互報姓名,曰:海光C86-3250、龍芯3A5000、飛騰D2000、兆芯KX-U6780A。其間海光3250言其太上蠻橫,只許子弟行走於伺服器和工作站之間,圍坐桌面乃是越矩,此番被拘於此方知桌面之妙,願以文會友,以人鑒己。老夫雖知其本意,卻亦有意相... ...
  • kprobe_events shell模式使用教程 kprobe 使用前提 需要內核啟用以下配置 CONFIG_KPROBES=y CONFIG_HAVE_KPROBES=y CONFIG_KPROBE_EVENT=y kprobe_events kprobe_events有兩種類型:kprobe, ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...