理解 隨機讀寫和順序讀寫

關於磁盤的讀寫性能曾經一直是我頭疼的地方,涉及研發或者測試時不清楚過程導致結果不盡人意。一起認識下關於磁盤的讀寫原理和順序讀寫,隨機讀寫。

首先磁盤是如何存儲數據的?

信息存儲在硬盤裡,把它拆開也看不見裡面有任何東西,只有些盤片。假設,你用顯微鏡把盤片放大,會看見盤片表面凹凸不平,凸起的地方被磁化,凹的地方是沒有被磁化;凸起的地方代表數字1(磁化為1),凹的地方代表數字0。因此硬盤可以以二進制來存儲表示文字、圖片等信息。

理解 隨機讀寫和順序讀寫

機械盤和固態盤的區別:

機械盤:數據是存儲的扇區的,讀寫是依靠磁頭的擺動尋址的。順序讀寫主要時間花費在了傳輸時間,隨機讀寫需要多次尋道和旋轉延遲。

固態盤:是由控制單元和固態存儲單元(DRAM或FLASH芯片)組成,存儲單元負責存儲數據,控制單元負責讀取、寫入數據。

由於固態硬盤沒有普通硬盤的機械結構,也不存在機械硬盤的尋道問題。

順序讀寫和隨機讀寫對比:

隨機讀寫是相對順序讀寫而言的,所謂隨機讀寫,是指可以在任何時候將存取文件的指針指向文件內容的任何位置。一般情況下SAS機械硬盤主要是看順序讀寫性能,SSD固態盤主要看隨機讀寫性能。

文件的操作方式:

順序讀寫:文件指針只能從頭移動到尾。

隨機讀寫:文件指針可以隨意移動,根據需要。

理解 隨機讀寫和順序讀寫

隨機示例:

假設存在一個文件尺寸為1024個字節的文件,如果按照順序存取原則的話,我們只能採用類似於FileStream.read()或者FileReader.readLine()的方式來一段一段,或者一行一行地讀取。

RandomAccessFile類的核心價值在於RandomAccessFile.seek()方法,通過這個方法,可以任意地指定當前存取文件的指針位置。

隨時調用RandomAccessFile類的getFilePionter()方法,獲取文件指針當前距離文件起始位置的偏移量。

小結:在日常項目開發中在設計存儲時,一定要考慮順序和隨機,優化其性能達到最高。例如,當前大多數數據庫使用的都是傳統的機械磁盤,因此,整個系統設計要儘可能順序I/O,避免昂貴的尋道時間和旋轉延遲的開銷.

更多內容請關注每日編程,每天進步一點。


分享到:


相關文章: