讀改變未來的九大演算法筆記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
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...