大批量文件处理的7条建议
生活随笔
收集整理的這篇文章主要介紹了
大批量文件处理的7条建议
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近由于項(xiàng)目需要,經(jīng)常搗騰大批量的文檔,期間也走過(guò)不少?gòu)澛贰0l(fā)現(xiàn)大批量文件處理這玩意,整不好就耗時(shí),大部分時(shí)間都花在焦急的等待過(guò)程中。隨著經(jīng)驗(yàn)的豐富,漸漸地也摸索出一些大批量文件處理的原則,分享在這里:
原則1:選擇命令行,而不是GUI
例如一個(gè)文件夾,里面存儲(chǔ)了百萬(wàn)數(shù)量級(jí)的文件,且包含大量子文件夾。現(xiàn)在要統(tǒng)計(jì)文件夾下所有文件的數(shù)量,最常見的做法是右鍵點(diǎn)擊文件夾屬性,查看文件數(shù)量。然而這樣做往往直接導(dǎo)致Windows無(wú)響應(yīng)。替代的做法是,選擇使用命令行工具來(lái)統(tǒng)計(jì),比如dos下的dir命令,或者使用windows下的linux命令行工具:unxutils,它可以在windows下模擬大部分linux的命令,用find . -type f|wc -l就可以快速統(tǒng)計(jì)。這樣做不僅比GUI下快出幾倍,而且也不會(huì)出現(xiàn)“無(wú)響應(yīng)”這樣的不友好界面。
原則2:壓縮存儲(chǔ)和傳輸
有時(shí)候磁盤上要存儲(chǔ)海量數(shù)據(jù),將文件散步在磁盤塊上,不僅占空間,也耗網(wǎng)絡(luò)傳輸時(shí)間。對(duì)于普通文本文件,一般壓縮格式的壓縮率都接近10%。如果要支持跨平臺(tái),可選擇zip或者tar這樣的通用格式。而傳輸整塊大文件,也比傳輸海量的小文件,節(jié)省不少時(shí)間。即便是將壓縮和解壓縮時(shí)間考慮在內(nèi),這樣做也比直接傳輸散開的文件快不少。
原則3:緩存常用信息
如果你的程序經(jīng)常需要遍歷一個(gè)文件夾下的所有文件進(jìn)行處理,且文件集合穩(wěn)定不變,系統(tǒng)花在遍歷的開銷非常大。這種情況下,你可以維護(hù)一個(gè)文件列表,系統(tǒng)只是在第一次生成列表的時(shí)候進(jìn)行了一次遍歷,而此后系統(tǒng)不再需要再遍歷文件夾,直接讀取文件列表信息即可。而后者的代價(jià)遠(yuǎn)遠(yuǎn)小于前者。當(dāng)然,也有很多情況下,常用信息經(jīng)常是變化的,這就需要用到本文提到的第4條原則。
原則4:增量式修改信息
原則3中提到的文件夾如果經(jīng)常存在變動(dòng),那是不是意味著每次還是不得不重新遍歷所有信息,以保證得到最新的文件夾信息?答案當(dāng)然是否,除非在最壞情況下,幾乎所有的文件都被更新了一遍,否則你就可以只修改變化的那部分信息,來(lái)避免重新計(jì)算的開銷。比如文件夾每天增加當(dāng)天的新數(shù)據(jù),且刪除7天前的數(shù)據(jù),那你就只需要更新這兩部分?jǐn)?shù)據(jù),而保留中間的6天數(shù)據(jù)。
原則5:并行處理
大家都有用下載工具下載文件的經(jīng)歷。如果你的寬帶最高支持每秒200K數(shù)據(jù)的帶寬,那么如果你現(xiàn)在進(jìn)行的任務(wù)每秒只下載100K數(shù)據(jù),你就應(yīng)該再開幾個(gè)任務(wù),并行下載,直到總下載量達(dá)到每秒200K的上限為止。這樣才能最大限度地利用帶寬,做最多的事。當(dāng)然一旦吞吐量到達(dá)瓶頸,再增加進(jìn)程或線程不僅不增加處理速度,還有可能導(dǎo)致資源死鎖,枯竭。
原則6:減少I/O開銷
讀寫I/O非常耗時(shí),如果不是很必要,就不用做這些無(wú)謂的操作。比如很多軟件都帶有不同級(jí)日志的開關(guān)。如果只是普通用戶使用,就不需要保存很多詳細(xì)日志信息,當(dāng)發(fā)生故障需要診斷時(shí),工程師可以打開日志開關(guān)進(jìn)行調(diào)試。測(cè)試工程師在平時(shí)測(cè)試中也可以重定向日志,或者nohup。不僅節(jié)省I/O,也可以保存足夠的信息,進(jìn)行錯(cuò)誤跟蹤。
原則7:選擇批處理,而不是one-by-one的處理
好多軟件都包含批處理的功能,通過(guò)給定的執(zhí)行列表,批量處理。而不需要用戶每次自己控制處理流程。比如wget軟件,支持給定的URL列表下載。如果用戶自己拆分URL列表,將其一一傳給wget,每次傳遞都造成wget的一次啟動(dòng)和結(jié)束操作,造成無(wú)謂的開銷。優(yōu)秀的軟件可以保證一次啟動(dòng)/結(jié)果來(lái)執(zhí)行批處理。所以在使用任何軟件前,先閱讀一下幫助手冊(cè),看看有沒有批處理的功能,保證你事半功倍。
原則1:選擇命令行,而不是GUI
例如一個(gè)文件夾,里面存儲(chǔ)了百萬(wàn)數(shù)量級(jí)的文件,且包含大量子文件夾。現(xiàn)在要統(tǒng)計(jì)文件夾下所有文件的數(shù)量,最常見的做法是右鍵點(diǎn)擊文件夾屬性,查看文件數(shù)量。然而這樣做往往直接導(dǎo)致Windows無(wú)響應(yīng)。替代的做法是,選擇使用命令行工具來(lái)統(tǒng)計(jì),比如dos下的dir命令,或者使用windows下的linux命令行工具:unxutils,它可以在windows下模擬大部分linux的命令,用find . -type f|wc -l就可以快速統(tǒng)計(jì)。這樣做不僅比GUI下快出幾倍,而且也不會(huì)出現(xiàn)“無(wú)響應(yīng)”這樣的不友好界面。
原則2:壓縮存儲(chǔ)和傳輸
有時(shí)候磁盤上要存儲(chǔ)海量數(shù)據(jù),將文件散步在磁盤塊上,不僅占空間,也耗網(wǎng)絡(luò)傳輸時(shí)間。對(duì)于普通文本文件,一般壓縮格式的壓縮率都接近10%。如果要支持跨平臺(tái),可選擇zip或者tar這樣的通用格式。而傳輸整塊大文件,也比傳輸海量的小文件,節(jié)省不少時(shí)間。即便是將壓縮和解壓縮時(shí)間考慮在內(nèi),這樣做也比直接傳輸散開的文件快不少。
原則3:緩存常用信息
如果你的程序經(jīng)常需要遍歷一個(gè)文件夾下的所有文件進(jìn)行處理,且文件集合穩(wěn)定不變,系統(tǒng)花在遍歷的開銷非常大。這種情況下,你可以維護(hù)一個(gè)文件列表,系統(tǒng)只是在第一次生成列表的時(shí)候進(jìn)行了一次遍歷,而此后系統(tǒng)不再需要再遍歷文件夾,直接讀取文件列表信息即可。而后者的代價(jià)遠(yuǎn)遠(yuǎn)小于前者。當(dāng)然,也有很多情況下,常用信息經(jīng)常是變化的,這就需要用到本文提到的第4條原則。
原則4:增量式修改信息
原則3中提到的文件夾如果經(jīng)常存在變動(dòng),那是不是意味著每次還是不得不重新遍歷所有信息,以保證得到最新的文件夾信息?答案當(dāng)然是否,除非在最壞情況下,幾乎所有的文件都被更新了一遍,否則你就可以只修改變化的那部分信息,來(lái)避免重新計(jì)算的開銷。比如文件夾每天增加當(dāng)天的新數(shù)據(jù),且刪除7天前的數(shù)據(jù),那你就只需要更新這兩部分?jǐn)?shù)據(jù),而保留中間的6天數(shù)據(jù)。
原則5:并行處理
大家都有用下載工具下載文件的經(jīng)歷。如果你的寬帶最高支持每秒200K數(shù)據(jù)的帶寬,那么如果你現(xiàn)在進(jìn)行的任務(wù)每秒只下載100K數(shù)據(jù),你就應(yīng)該再開幾個(gè)任務(wù),并行下載,直到總下載量達(dá)到每秒200K的上限為止。這樣才能最大限度地利用帶寬,做最多的事。當(dāng)然一旦吞吐量到達(dá)瓶頸,再增加進(jìn)程或線程不僅不增加處理速度,還有可能導(dǎo)致資源死鎖,枯竭。
原則6:減少I/O開銷
讀寫I/O非常耗時(shí),如果不是很必要,就不用做這些無(wú)謂的操作。比如很多軟件都帶有不同級(jí)日志的開關(guān)。如果只是普通用戶使用,就不需要保存很多詳細(xì)日志信息,當(dāng)發(fā)生故障需要診斷時(shí),工程師可以打開日志開關(guān)進(jìn)行調(diào)試。測(cè)試工程師在平時(shí)測(cè)試中也可以重定向日志,或者nohup。不僅節(jié)省I/O,也可以保存足夠的信息,進(jìn)行錯(cuò)誤跟蹤。
原則7:選擇批處理,而不是one-by-one的處理
好多軟件都包含批處理的功能,通過(guò)給定的執(zhí)行列表,批量處理。而不需要用戶每次自己控制處理流程。比如wget軟件,支持給定的URL列表下載。如果用戶自己拆分URL列表,將其一一傳給wget,每次傳遞都造成wget的一次啟動(dòng)和結(jié)束操作,造成無(wú)謂的開銷。優(yōu)秀的軟件可以保證一次啟動(dòng)/結(jié)果來(lái)執(zhí)行批處理。所以在使用任何軟件前,先閱讀一下幫助手冊(cè),看看有沒有批處理的功能,保證你事半功倍。
轉(zhuǎn)載于:https://blog.51cto.com/williamwhe/155424
總結(jié)
以上是生活随笔為你收集整理的大批量文件处理的7条建议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Visual basic 6读写ini文
- 下一篇: 在对的时间 遇见对的人 是一种幸福