數(shù)據(jù)庫作為計(jì)算機(jī)學(xué)科中一個(gè)比較重要的分支,也是一個(gè)對于程序員來說非常好的學(xué)習(xí)方向。平時(shí)我們用的最多的,同時(shí)也是接觸最多的一定是增刪改查語句,select, update,delete等,當(dāng)然,我不會(huì)拿這些再說一遍,這些都是老的掉渣的東西了。所以我們可以學(xué)習(xí)高級
數(shù)據(jù)庫作為計(jì)算機(jī)學(xué)科中一個(gè)比較重要的分支,也是一個(gè)對于程序員來說非常好的學(xué)習(xí)方向。平時(shí)我們用的最多的,同時(shí)也是接觸最多的一定是增刪改查語句,select,
update,delete等,當(dāng)然,我不會(huì)拿這些再說一遍,這些都是老的掉渣的東西了。所以我們可以學(xué)習(xí)高級數(shù)據(jù)庫中所以涉及的技術(shù)。換句話,其實(shí)就是拋開業(yè)務(wù)層的邏輯,從更加深層次的角度理解數(shù)據(jù)庫。今天我主要提交3個(gè)技術(shù)點(diǎn),
1.數(shù)據(jù)索引技術(shù),典型的B+樹索引系列
2.數(shù)據(jù)庫故障恢復(fù)技術(shù),我這里只提的是基于日志的恢復(fù)技術(shù)
3.數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu),講講時(shí)下流行的分布式數(shù)據(jù)庫系統(tǒng)
數(shù)據(jù)庫索引技術(shù)關(guān)系著數(shù)據(jù)的查詢速度,當(dāng)數(shù)據(jù)量比較小的時(shí)候,響應(yīng)是沒有問題,當(dāng)數(shù)據(jù)庫中擁有百萬,千萬級數(shù)據(jù)量的數(shù)據(jù)時(shí),建立索引是必須的。傳統(tǒng)的數(shù)據(jù)查詢操作時(shí)在海量數(shù)據(jù)中一條條的查詢,在磁盤塊中逐個(gè)尋找效率當(dāng)然不高,如果是連續(xù)存儲(chǔ)的還算運(yùn)氣好,如果是物理上不連續(xù)的,那結(jié)果可想而知。所以在這里我們引入了一個(gè)名叫“index”索引概念的東西,他不保存真實(shí)的數(shù)據(jù),索引其實(shí)是一個(gè)指向真實(shí)數(shù)據(jù)記錄的地址指針,要查詢的數(shù)據(jù)的時(shí)候,先找到此索引值,然后根據(jù)此索引值,找到真實(shí)記錄地址,因?yàn)椴槐4嬲鎸?shí)數(shù)據(jù),索引查詢的速度比較快。首先我們說說順序索引,順序索引的定義是當(dāng)數(shù)據(jù)文件的存儲(chǔ)順序是按某個(gè)索引鍵值的順序排列時(shí),稱該文件為順序文件,為順序文件建立索引的時(shí)候,一般此索引的建立以某個(gè)索引鍵一致,比如說某ID建立的索引為順序索引,順序文件的索引可以采用二分查找方法能夠很快定位到相應(yīng)的索引記錄。B+樹索引是以平衡樹的結(jié)構(gòu)構(gòu)建的索引,B+樹憑借其特殊的結(jié)構(gòu)設(shè)計(jì),一直保持著一種比較高的查詢效率,在我之前的文章中也都提到過了。最后說的是散列索引,散列索引是利用哈希函數(shù)將搜索鍵值,分別映射到M個(gè)記錄搜索鍵值存儲(chǔ)地址的桶中,這樣可以利用哈希算法直接檢索,我們都知道哈希算法,的速度是相當(dāng)快的哦,但是同時(shí)此時(shí)的一個(gè)好的哈希算法就顯得至關(guān)重要了,最好能將索引記錄均勻地分布到各個(gè)桶中。
基于日志的恢復(fù)技術(shù)也是數(shù)據(jù)庫容災(zāi)處理的一部分,這里的日志主要有3個(gè),undo,redo,undo/redo三種。undo,從這個(gè)英文中我們也可大概知道他的意思是不要做,就是撤銷操作的意思了,一般我們在操作未完全完成的情況下才會(huì)執(zhí)行撤銷動(dòng)作,這樣可以避免臟數(shù)據(jù)的誕生。undo的日志就是為了防止出現(xiàn)這個(gè)情況的。undo的日志記錄結(jié)構(gòu)為:
其中:T是更新數(shù)據(jù)的事務(wù),X是T更新的數(shù)據(jù)元素,V是更新前的舊值,數(shù)據(jù)出錯(cuò)了就是拿這個(gè)值更新回去的,一個(gè)完整的undo日志記錄如下:
如果在commit 操作之前系統(tǒng)故障了,也就是 (1).寫更新數(shù)據(jù)量元素的日志 (2).再寫更新的數(shù)據(jù)元素 (3).最后寫COMMIT,表明事務(wù)已經(jīng)成功提交 但是在這里其實(shí)會(huì)暴露一個(gè)潛在的問題,此要求事務(wù)必須將所做的修改寫到磁盤后才能提交事務(wù),這無疑增加了I/O開銷,實(shí)際上,我們可以將數(shù)據(jù)的修改操作暫緩寫到磁盤上,等到緩沖區(qū)滿時(shí)再寫入磁盤,就可以節(jié)省很多I/O操作了,于是就有了redo日志的出現(xiàn),redo日志的格式與undo日志略有區(qū)別: (1).寫更新數(shù)據(jù)量元素的日志 (2).再寫COMMIT,表明事務(wù)已經(jīng)成功提交 (3).最后寫更新的數(shù)據(jù)元素 每次尋找到END CKPT,可以將上一個(gè)前的 最后來看看近年來隨著分布式系統(tǒng)的出現(xiàn),也出現(xiàn)了分布式數(shù)據(jù)庫的概念,分布式數(shù)據(jù)庫數(shù)據(jù)庫系統(tǒng)可以看做一系列的集中式數(shù)據(jù)庫的聯(lián)合,在邏輯上屬于同一系統(tǒng),物理上是分布式,不連續(xù)的。他們之間的唯一聯(lián)系就是----網(wǎng)絡(luò)。一個(gè)數(shù)據(jù)庫的查詢可以涉及多地的分布式數(shù)據(jù)查詢,與之相應(yīng)的還有分布式事務(wù)管理,這個(gè)比分布式查詢更為復(fù)雜,網(wǎng)絡(luò)因素將成為影響分布式查詢時(shí)間的最大的影響因素,在傳統(tǒng)的本地?cái)?shù)據(jù)庫中,計(jì)算機(jī)的CPU處理速度會(huì)是影響查詢速度的最主要因素,與現(xiàn)在的分布式數(shù)據(jù)庫是截然不同的,所以分布式數(shù)據(jù)庫的設(shè)計(jì)能設(shè)置成本地訪問的就不要搞成分布式的查詢,一般90%的查詢可以用在本地查詢,真到了那10%就通過分布式查詢的方式,而且分布式的查詢,也應(yīng)該選擇離自己最近的一個(gè)分布式數(shù)據(jù)庫中。分布式數(shù)據(jù)的設(shè)計(jì)方法有自底向上和自頂向下2種,這個(gè)我就不展開了,比較復(fù)雜。 聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com