資料庫作為計算機學科中乙個比較重要的分支,也是乙個對於程式設計師來說非常好的學習方向。平時我們用的最多的,同時也是接觸最多的一定是增刪改查語句,select,
update,delete等,當然,我不會拿這些再說一遍,這些都是老的掉渣的東西了。所以我們可以學習高階資料庫中所以涉及的技術。換句話,其實就是拋開業務層的邏輯,從更加深層次的角度理解資料庫。今天我主要提交3個技術點,
1.資料索引技術,典型的b+樹索引系列
2.資料庫故障恢復技術,我這裡只提的是基於日誌的恢復技術
3.資料庫系統結構,講講時下流行的分布式資料庫系統
資料庫索引技術關係著資料的查詢速度,當資料量比較小的時候,響應是沒有問題,當資料庫中擁有百萬,千萬級資料量的資料時,建立索引是必須的。傳統的資料查詢操作時在海量資料中一條條的查詢,在磁碟塊中逐個尋找效率當然不高,如果是連續儲存的還算運氣好,如果是物理上不連續的,那結果可想而知。所以在這裡我們引入了乙個名叫「index」索引概念的東西,他不儲存真實的資料,索引其實是乙個指向真實資料記錄的位址指標,要查詢的資料的時候,先找到此索引值,然後根據此索引值,找到真實記錄位址,因為不儲存真實資料,索引查詢的速度比較快。首先我們說說順序索引,順序索引的定義是當資料檔案的儲存順序是按某個索引鍵值的順序排列時,稱該檔案為順序檔案,為順序檔案建立索引的時候,一般此索引的建立以某個索引鍵一致,比如說某id建立的索引為順序索引,順序檔案的索引可以採用二分查詢方法能夠很快定位到相應的索引記錄。b+樹索引是以平衡樹的結構構建的索引,b+樹憑藉其特殊的結構設計,一直保持著一種比較高的查詢效率,在我之前的文章中也都提到過了。最後說的是雜湊索引,雜湊索引是利用雜湊函式將搜尋鍵值,分別對映到m個記錄搜尋鍵值儲存位址的桶中,這樣可以利用雜湊演算法直接檢索,我們都知道雜湊演算法,的速度是相當快的哦,但是同時此時的乙個好的雜湊演算法就顯得至關重要了,最好能將索引記錄均勻地分布到各個桶中。
基於日誌的恢復技術也是資料庫容災處理的一部分,這裡的日誌主要有3個,undo,redo,undo/redo三種。undo,從這個英文中我們也可大概知道他的意思是不要做,就是撤銷操作的意思了,一般我們在操作未完全完成的情況下才會執行撤銷動作,這樣可以避免髒資料的誕生。undo的日誌就是為了防止出現這個情況的。undo的日誌記錄結構為:
其中:t是更新資料的事務,x是t更新的資料元素,v是更新前的舊值,資料出錯了就是拿這個值更新回去的,乙個完整的undo日誌記錄如下:
//開啟事務
//對資料a 進行了資料更改,把他的舊值記錄下來
//對資料b進行了資料操作,把b的舊值也記錄下來
//事務執行成功,也記錄
如果在commit 操作之前系統故障了,也就是沒有寫入記錄中,也不知道資料操作到底對不對,日誌統一從後往前逆序讀取,首先遇到,將b更新到舊值10,然後又遇到,將a還原回到10,直到遇到,說明事物恢復成功,又回到了事物的出發點日誌恢復結束。undo日誌的事務執行順序為:
(1).寫更新資料量元素的日誌
(2).再寫更新的資料元素
(3).最後寫commit,表明事務已經成功提交
但是在這裡其實會暴露乙個潛在的問題,此要求事務必須將所做的修改寫到磁碟後才能提交事務,這無疑增加了i/o開銷,實際上,我們可以將資料的修改操作暫緩寫到磁碟上,等到緩衝區滿時再寫入磁碟,就可以節省很多i/o操作了,於是就有了redo日誌的出現,redo日誌的格式與undo日誌略有區別:
(1).寫更新資料量元素的日誌
(2).再寫commit,表明事務已經成功提交
(3).最後寫更新的資料元素
所以如果在2,3步驟直接出錯,系統也當時值已經更新成功了,會重做操作的,這裡的v儲存的就是新的值,用於重做操作時使用的,說明a,b的值可能延遲更長的時間才能寫到磁碟中,如果這段時間系統出異常了,就redo操作,還有一種是undo/redo,模式相結合的,靈活性最強。所有的日誌記錄都要檢查點的乙個機制,檢查點之前的記錄都可以忽略不計了,每次都從新的檢查點開始,檢查點的2個標記為:
每次尋找到end ckpt,可以將上乙個前的的日誌丟棄。
最後來看看近年來隨著分布式系統的出現,也出現了分布式資料庫的概念,分布式資料庫資料庫系統可以看做一系列的集中式資料庫的聯合,在邏輯上屬於同一系統,物理上是分布式,不連續的。他們之間的唯一聯絡就是----網路。乙個資料庫的查詢可以涉及多地的分布式資料查詢,與之相應的還有分布式事務管理,這個比分布式查詢更為複雜,網路因素將成為影響分布式查詢時間的最大的影響因素,在傳統的本地資料庫中,計算機的cpu處理速度會是影響查詢速度的最主要因素,與現在的分布式資料庫是截然不同的,所以分布式資料庫的設計能設定成本地訪問的就不要搞成分布式的查詢,一般90%的查詢可以用在本地查詢,真到了那10%就通過分布式查詢的方式,而且分布式的查詢,也應該選擇離自己最近的乙個分布式資料庫中。分布式資料的設計方法有自底向上和自頂向下2種,這個我就不展開了,比較複雜。
資料庫典型題目
工廠 工廠編號,廠名,位址 主碼是工廠編號 職工 工號,姓名,工廠編號,聘期,工資 主碼是工號,外碼是工廠編號 產品 產品編號,產品名,規格 主碼是產品編號 生產關係 產品編號,工廠編號,計畫數量 主碼是 產品編號,工廠編號 外碼是產品編號 工廠編號 select a anmae from a wh...
高階資料庫技術培訓
課程大綱 1 資料庫及其基本理論 1.1資料庫技術概述 1.2關聯式資料庫及其設計理論 1.3sql簡介 1.4資料庫技術的新進展 2 資料的組織與儲存 2.1儲存器的層次及特性 2.2磁碟結構及訪問特性 2.3資料元素的表示 2.4資料檔案在磁碟上的組織 2.5資料檔案的其他組織方式 2.6資料訪...
mysql資料庫高階 mysql資料庫高階
一 索引 索引,是資料庫中專門用於幫助使用者快速查詢資料的一種資料結構。類似於字典中的目錄,查詢字典內容時可以根據目錄查詢到資料的存放位置,然後直接獲取即可。分類 普通索引 唯一索引 全文索引 組合索引 主鍵索引 1 普通索引 普通索引僅有乙個功能 加速查詢 建立表時建立索引 create tabl...