1. 程式人生 > >隨機讀寫與順序讀寫怎麼去理解

隨機讀寫與順序讀寫怎麼去理解

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

首先磁碟是如何儲存資料的?

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

機械盤和固態盤的區別:

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

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

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

(硬碟、U盤、光碟、SD卡等儲存裝置的資料發生了丟失,使用迷你兔資料恢復軟體(minitool)進行恢復找回。)

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

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

檔案的操作方式:

順序讀寫:檔案指標只能從頭移動到尾。

隨機讀寫:檔案指標可以隨意移動,根據需要。

隨機示例:

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

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

隨時呼叫RandomAccessFile類的getFilePionter()方法,獲取檔案指標當前距離檔案起始位置的偏移量。

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

(迷你兔資料恢復minitool具有“刪除恢復”、“格式化恢復”、“硬碟恢復”、“深度恢復”、“移動儲存裝置恢復”五大功能模組,恢復效率高,安全性有保障。)