讀改變未來的九大演算法筆記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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...