番外篇--文件備份系統

之前說過,我這個人有備份文件的習慣,而且不止一個備份硬盤,所以如果使用我之前的方式,先格盤,再進行復制,費時費力不說,還容易誤操作,畢竟是人手點,時間長了很容易一下沒把文件全部劃下來,所以我就用Java自己寫了一個文件備份工具類,現在我把這個工具完善了一下,增加了一些實用的功能,並在碼雲上開源了(地址),本篇主要記錄了一下寫這個系統的思路和坑吧

本來最初我是想寫一個簡單的io流,把文件從一個盤遷移到另外一個盤就行了,我最開始也確實是這樣乾的,但是很快,問題就來了,效率太低,我需要備份的文件大約是300G左右,其中起碼有3萬個文件,如果每次都重新寫入,硬盤炸了不說,所消耗的時間也太多了,不值得,所以我後來又去試着依靠文件最後修改時間來確定是否需要更新,但是出現了我上一篇文章提到的那個問題,緩存的byte數組越大,效率越低,在上篇文章裏我已經詳細說過了,這裏就不贅述了

解決完這個問題之後,我又想着,看看能不能增加一個功能,畢竟我備份的文件也是會經常改變的,我希望兩個文件夾裏的東西完全一致,於是我就寫了一個鏡像模式,將兩個文件夾中的內容保持完全一致,最初的版本大約代碼有2000行以上,我經過各種拆分,最終全部代碼加起來也就500行不到,這件事給我提了醒,以後代碼寫完了一定要進行精簡和重構,無論是代碼行數還是運行效率都會大大提升,下一步準備做一個同步更新,把兩個文件夾中的內容全部同步,以防我在備份硬盤裏改了東西,最後一不留神就被覆蓋了,然後下一步就是看看能不能加上多線程,然後加上多個硬盤同時同步,大概思路我已經理清了,先將文件讀取到內存裏,然後使用多線程從內存中同時寫入多個硬盤,不過這個思路其實有問題,因爲硬盤的寫入速度是不同的,如果相差較大,寫入量又多,會導致要麼所有硬盤等最差的那個硬盤,要麼就是內存炸了,要麼就是多次讀取同一個文件,我看看到時候解決一下

具體的代碼我就不貼出來了,想看的可以去碼雲下載,我都寫了註釋,而且代碼本身也不算太難

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章