[數據庫系統]存儲和文件結構

全部計算機問題均可以歸結爲緩存問題 ---某大佬

 上面這句話是某日在知乎上無心看到的,但卻在個人腦海裏停留良久。若是以前看到這句話,可能也就略過了,但最近作了很多緩存想關的工做,從redis到ADT設備緩存,從web應用到操做系統實現,緩存無處不在,毫無疑問,數據庫系統也緩存。這篇筆記主要從理論出發,淺析數據庫系統的存儲和文件結構。web

1.RAID

RAID是什麼?

 RAID(ReDundant Array of Independent Disk)即獨立磁盤冗餘陣列,是一種多磁盤組織技術。
 說人話:RAID其實就是經過冗餘提升存儲的可靠性和並行性,由機率論知識(機率論??)能夠知道,一堆磁盤出現一次故障的機率確定比某一張磁盤發生故障的機率大,若是咱們的N張磁盤在不作備份的狀況下,只要有一張出現毛病,就會損失大量的數據,對於某些應用來講,就算丟了1byte的數據都是不可容忍的(你的支付寶少了1byte的錢(我沒這麼多 不用擔憂)),引入冗餘是個解決的好辦法,嗯,最簡單粗暴的方法就算砸錢復制每一張磁盤,這種技術也就是鏡像(影子),即一張邏輯盤對應幾張物理盤,這樣即便你的1byte記錄的鉅款在某個盤上丟了也沒事,但這時候你說,萬一地震了火災了三體人入侵了怎麼辦(三體人入侵你就等着去澳大利亞吧),固然,儘管有這麼多可能,鏡像也比單張磁盤的可靠性高很多(平均丟失時間能夠長達55~100年)[1]redis

 同時,RAID還能夠提升並行性,就像使用Mycat進行數據庫分片同樣,我能夠在多張磁盤進行數據拆分來提升傳輸速率,主要有如下幾種:
 1.比特級拆分(聽起來很厲害的樣子):把每一個字節都進行了拆分,將不一樣位存到不一樣的磁盤,好比第i位存到第i號磁盤。(好細緻。。)
 2.塊級拆分(最經常使用):把磁盤陣列當作一塊單獨的大磁盤,而且給塊進行邏輯編號,好比將邏輯上的第i塊存到物理磁盤(i mod n) + 1張磁盤上,有點意思了哈,讀一個大文件的時候,能夠從n張磁盤並行取n個塊,這樣不就快了嗎。
 磁盤系統並行的兩個目的:1 負載平衡多個小的訪問操做(塊訪問)以提升訪問操做吞吐量,2 並行執行大的訪問操做,以減小訪問操做的響應時間[1]。數據庫

RAID級別

 前面說道,鏡像是比較燒錢的,拆分雖然提升了並行性,可是不能提升可用性。爲了下降成本(省錢)提出了一些方案,分爲若干個RAID級別(RAID level),具體的就不贅述了。緩存

2. 文件組織

 數據庫外表看起來這麼高大上,其實底層仍是用文件存儲的,由操做系統進行維護,數據庫中的記錄都是存在塊中的(而一個塊能夠包含不少記錄),塊是存儲分配和數據傳輸的基本單元,大多數數據庫默認塊大小爲4到8KB
 記錄能夠分紅定長和變長記錄操作系統


Reference

[1] DataBase System Concepts 6th Abraham Silberschatz支付寶

相關文章
相關標籤/搜索