需求:
在專案開發中,我們會遇到單個檔案大小超過1tb的檔案,這樣的檔案只能進行單檔案讀取,往往會造成讀取完成耗時過長,導致客戶在使用體驗過程中不滿意。
為了解決提公升大檔案的解析速度,我想到了先分割大檔案為小檔案,之後進行並行多個檔案同時解析入庫方案。
那麼,怎麼才可以把乙個大檔案分割為多個小檔案呢?
如果我按照大小來控制分割出來的小檔案,會造成檔案的丟失問題,如果按照行數來分割,一行一行進行讀取務必會造成分割檔案耗時過長。
討論:如果乙個1tb的檔案,我們按照大小來控制檔案個數,假設每個分割出來的檔案大小為200m,這樣的話1tb分割出來約5200個檔案,這樣子的話最多造成約10000行資訊被破壞,可以忽略不計。所以我們為了減少分割檔案帶來的耗時時間長度,採取分割方案採用定長控制分割出來的檔案大小。
1using (filestream readerstream = new
filestream(file, filemode.open, fileaccess.read))2】:
", filepath, datetime.now.tostring("
yyyy-mm-dd hh:mm:ss.fff
"));
15using (filestream writerstream = new
filestream(filepath, filemode.openorcreate, fileaccess.write))
16】:
", filepath, datetime.now.tostring("
yyyy-mm-dd hh:mm:ss.fff
"));
2829 readercursor = 0
;30 filecursor++;
3132
goto
nextfilebegin;33}
34}35}
36}37}
38 }
1using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
system.io;
6using
system.configuration;78
namespace
bigfilesplittest935
else
3641
42int steps = (int)(fileinfo.length /splitfilesize);
43using (filestream fs = new
filestream(file, filemode.open, fileaccess.read))
44】:
", filepath, datetime.now.tostring("
yyyy-mm-dd hh:mm:ss.fff
"));
5354
byte input =br.readbytes(splitfilesize);
55using (filestream writefs = new
filestream(filepath, filemode.create))
5661}62
63 isreadingcomplete = (input.length !=splitfilesize);
64if (!isreadingcomplete)
6568 console.writeline("
完成讀取檔案【】:
", filepath, datetime.now.tostring("
yyyy-mm-dd hh:mm:ss.fff
"));69}
70}71}
7273
74 console.writeline("
分隔完成,請按下任意鍵結束操作。。。");
75console.readkey();
7677}78
}79 }
從實驗結果發現:方案一的效能較方案二的效能約耗時10倍。
具體原因為什麼?
請你思考下:
一次性讀取1m,直到讀取到200m為止,開始寫入下乙個分割檔案。一次性讀取200m,立即寫入分割檔案,開始下乙個分割檔案操作。
linux 分割大檔案
你曾經是否想要把乙個大檔案分割成多個小檔案?比如乙個5gb日誌檔案,我們需要把它分成多個小檔案,這樣我們才有可能使用普通的文字編輯器讀取它。有時我們需要傳輸20gb的大檔案到另一台伺服器,這就需要我們把它分割成多個檔案,這樣便於傳輸資料。下面我們來通過五個例項來講解它。split命令分割檔案成每個檔...
linux 大檔案分割 split
1,split b 100m d a 3 test.log small test log 結果 small test log 001 small test log 002 small test log 003 每個檔案的大小為100mb 2,split b 100m test.log small t...
大檔案分割上傳
有的時候我們想要操作的檔案很大,比如 我們想要上傳乙個大檔案,但是收到上傳檔案大小的限制,無法上傳,這是我們可以將乙個大的檔案分割成若干個小檔案進行操作,然後再把小檔案還原成原始檔。對應的js function submitform begin,part done function result f...