tips:看了MySQL索引背後的數據結構及算法原理後,裏邊有說:html
"數據庫系統的設計者巧妙利用了磁盤預讀原理,將一個節點的大小設爲等於一個頁,這樣每一個節點只須要一次I/O就能夠徹底載入。爲了達到這個目的,在實際實現B-Tree還須要使用以下技巧:每次新建節點時,直接申請一個頁的空間,這樣就保證一個節點物理上也存儲在一個頁裏,加之計算機存儲分配都是按頁對齊的,就實現了一個node只需一次I/O。"node
而後就不懂了頁是什麼意思,就看了這篇關於硬盤的超詳細解釋:http://blog.csdn.net/hguisu/article/details/7408047mysql
下邊是個人一些摘錄,想大概看時就看這個,想看詳細的就看上邊這個啦。算法
對於頁的理解:sql
由於說一個扇區512byte,就是0.5k,一頁是4K,那就是一頁是8個扇區的大小,大概就這樣理解吧。數據庫
咱們知道信息存儲在硬盤裏,把它拆開也看不見裏面有任何東西,只有些盤片。假設,你用顯微鏡把盤片放大,會看見盤片表面凹凸不平,凸起的地方被磁化,凹的地方是沒有被磁化;凸起的地方表明數字1(磁化爲1),凹的地方表明數字0。所以硬盤能夠以二進制來存儲表示文字、圖片等信息。緩存
一、硬盤的組成數據結構
硬盤你們必定不會陌生,咱們能夠把它比喻成是咱們電腦儲存數據和信息的大倉庫。通常說來,不管哪一種硬盤,都是由盤片、磁頭、盤片主軸、控制電機、磁頭控制器、數據轉換器、接口、緩存等幾個部份組成。ui
平面圖spa
立體圖
全部的盤片都固定在一個旋轉軸上,這個軸即盤片主軸。而全部盤片之間是絕對平行的,在每一個盤片的存儲面上都有一個磁頭,磁頭與盤片之間的距離比頭髮 絲的直徑還小。全部的磁頭連在一個磁頭控制器上,由磁頭控制器負責各個磁頭的運動。磁頭可沿盤片的半徑方向動做,(實際是斜切向運動),每一個磁頭同一時刻也必須是同軸的,即從正上方向下看,全部磁頭任什麼時候候都是重疊的(不過目前已經有多磁頭獨立技術,可不受此限制)。而盤片以每分鐘數千轉到上萬轉的速度在高速旋轉,這樣磁頭就能對盤片上的指定位置進行數據的讀寫操做。
因爲硬盤是高精密設備,塵埃是其大敵,因此必須徹底密封。
二、硬盤的工做原理
硬盤在邏輯上被劃分爲磁道、柱面以及扇區.
盤片被劃分紅一系列同心環,圓心是盤片中心,每一個同心環叫作一個磁道,全部半徑相同的磁道組成一個柱面。磁道被沿半徑線劃分紅一個個小的段,每一個段叫作一個扇區,每一個扇區是磁盤的最小存儲單元。爲了簡單起見,咱們下面假設磁盤只有一個盤片和一個磁頭。
當須要從磁盤讀取數據時,系統會將數據邏輯地址傳給磁盤,磁盤的控制電路按照尋址邏輯將邏輯地址翻譯成物理地址,即肯定要讀的數據在哪一個磁道,哪一個扇區。 爲了讀取這個扇區的數據,須要將磁頭放到這個扇區上方,爲了實現這一點,磁頭須要移動對準相應磁道,這個過程叫作尋道,所耗費時間叫作尋道時間,而後磁盤 旋轉將目標扇區旋轉到磁頭下,這個過程耗費的時間叫作旋轉時間。
即一次訪盤請求(讀/寫)完成過程由三個動做組成:
1)尋道(時間):磁頭移動定位到指定磁道
2)旋轉延遲(時間):等待指定扇區從磁頭下旋轉通過
3)數據傳輸(時間):數據在磁盤與內存之間的實際傳輸
所以在磁盤上讀取扇區數據(一塊數據)所需時間:
Ti/o=tseek +tla + n *twm
其中:
tseek 爲尋道時間
tla爲旋轉時間
twm 爲傳輸時間
3.局部性原理與磁盤預讀
因爲存儲介質的特性,磁盤自己存取就比主存慢不少,再加上機械運動耗費,磁盤的存取速度每每是主存的幾百分分之一,所以爲了提升效率,要儘可能減小磁 盤I/O。爲了達到這個目的,磁盤每每不是嚴格按需讀取,而是每次都會預讀,即便只須要一個字節,磁盤也會從這個位置開始,順序向後讀取必定長度的數據放 入內存。這樣作的理論依據是計算機科學中著名的局部性原理:
當一個數據被用到時,其附近的數據也一般會立刻被使用。
程序運行期間所須要的數據一般比較集中。
因爲磁盤順序讀取的效率很高(不須要尋道時間,只需不多的旋轉時間),所以對於具備局部性的程序來講,預讀能夠提升I/O效率。
預讀的長度通常爲頁(page)的整倍數。頁是計算機管理存儲器的邏輯塊,硬件及操做系統每每將主存和磁盤存儲區分割爲連續的大小相等的塊,每一個存 儲塊稱爲一頁(在許多操做系統中,頁得大小一般爲4k),主存和磁盤以頁爲單位交換數據。當程序要讀取的數據不在主存中時,會觸發一個缺頁異常,此時系統 會向磁盤發出讀盤信號,磁盤會找到數據的起始位置並向後連續讀取一頁或幾頁載入內存中,而後異常返回,程序繼續運行。