主存存取和磁盤存取原理筆記

前言

主存存取原理、磁盤存取原理、MySql 使用的B+/-Tree原理數據庫

數據庫索引爲什麼採用B+Tree

  1. 紅黑樹等數據結構能夠用來實現索引
  2. 文件系統及數據庫系統廣泛採用B-/B+ Tree 做爲索引結構
  3. MySql 廣泛採用 B+Tree 實現
  4. 索引自己很大,不可能所有存儲內存,所以須要以索引文件的形式存儲磁盤
  5. 相對於內存讀取,I/O存取的消耗要高几個數量級(兩個,內存1s,磁盤100多s),所以索引的結構組織儘可能減小查找過程當中的磁盤I/O操做

主存存取原理

  1. 主存基本就是隨機讀寫存儲器(RAM),簡化之,以下:
    image
  2. 抽象角度看,主存是一系列的存儲單元(晶體管)組成的矩陣,經過行地址和列地址能夠定位惟一存儲單元
  3. 主存存取過程:當系統須要讀取主存時,將地址信號放到地址總線,主存讀到地址信號,後解析信號並定位指定存儲單元,而後將此存儲單元數據放到數據總線,供其它部件讀取;
  4. 寫主存:系統將要寫入單元地址和數據分別放在地址總線和數據總線,主存讀取兩個總線的內容,作相應的寫操做

磁盤存儲原理

  1. 磁盤總體結構示意圖:
  2. 一個磁盤由大小相同且同軸的圓形盤片組成,圓盤能夠轉動,磁頭能夠沿磁盤半徑方向運動(尋道)
  3. 圓片被劃分一系列同心圓,每一個同心環叫作一個磁道,全部半徑相同的磁道組成一個柱面。磁道被沿半徑線劃分紅一個個小段,每一個段叫作一個扇區
  4. 爲了讀取這個扇區的數據,須要將磁頭放到這個扇區上方,這個過程叫作尋道,花費時間叫作尋道時間,而後磁盤旋轉將目標扇區旋轉到磁頭下,這個過程耗時叫旋轉耗時。

局部性原理和磁盤預讀

  1. 因爲存儲介質的特性,磁盤自己存取就比主存慢不少,再加上機械運動耗費(尋道+ 旋轉),磁盤的存取速度每每是主存的幾百分之一
  2. 計算機科學著名的局部性原理:當一個數據被用到時,其附近的數據也一般會立刻被使用。(磁盤讀取會有被預讀,相好比尋道時間,只需不多的旋轉時間就能完成磁盤順序讀取,減小IO操做。)
  3. 預讀的長度通常爲頁(page)的整數倍。頁是計算機存儲器的邏輯塊,頁的大小一般爲4K。
  4. 計算機存儲緩存

  5. 寄存器 64bit: CPU工做臺,存放計算數據的地方
  6. 一級緩存L1 4x 64K
  7. 二級緩存L2 4x 256K
  8. 三級緩存L3 8MB
  9. 內存 4GB
  10. 磁盤 500GB

B-/+ Tree 索引的性能分析

  1. 巧妙地利用磁盤預讀原理,將一個樹節點大小設爲一個頁(4k),使得每一個節點只須要一次IO 就能夠徹底載入
  2. 一般B-/+Tree的高(h)爲3,而度(d)會很大,度越大索引性能越好
  3. 存儲引擎MylSAM 索引方式,key 域存儲主鍵,data域存儲值得地址,非彙集,索引文件和數據文件是分離的。
  4. 存儲引擎InnoDB,data域存儲完整的數據邏輯。彙集型,數據文件自己就是索引文件。
    緩存

    InnoDB 索引引擎主鍵的選擇

  5. 自增主鍵 pk 業務主鍵(身份證)
  6. 自增主鍵,每次 insert 操做會按順序添加到當前索引節點的後續位置,當一頁寫滿,自動開闢一個新的頁。
  7. 非自增主鍵(身份證號或學號),因爲每次插入主鍵的值都近似隨機,所以每次新記錄都會查到現有索引頁的中間位置,不得不產生一次數據移動數據結構

相關文章
相關標籤/搜索