自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

第41期:文件的性能分析

企業(yè)動(dòng)態(tài)
理論上講,軟件可以穿過(guò)操作系統(tǒng)直接進(jìn)行磁盤(pán)扇區(qū)的訪問(wèn),但實(shí)在太過(guò)于麻煩而幾乎不會(huì)實(shí)踐機(jī)會(huì),這里就不考慮了,我們只討論操作系統(tǒng)下的存儲(chǔ)形式,而文件就是其中重要的存儲(chǔ)形式。

【數(shù)據(jù)蔣堂】第41期:文件的性能分析

我們以前講過(guò)硬盤(pán)的性能特征,主要是針對(duì)硬件層面進(jìn)行分析的,現(xiàn)在我們來(lái)考慮軟件層面的差異。

理論上講,軟件可以穿過(guò)操作系統(tǒng)直接進(jìn)行磁盤(pán)扇區(qū)的訪問(wèn),但實(shí)在太過(guò)于麻煩而幾乎不會(huì)實(shí)踐機(jī)會(huì),這里就不考慮了,我們只討論操作系統(tǒng)下的存儲(chǔ)形式,而文件就是其中重要的存儲(chǔ)形式。

文件一般有兩種:文本文件和二進(jìn)制文件,我們分別來(lái)討論。

文本文件

文本是很常見(jiàn)的數(shù)據(jù)存儲(chǔ)形式,它具有通用性易讀性等優(yōu)點(diǎn)而被廣泛使用。但是,文本的性能卻非常差!

文本字符不能直接運(yùn)算,需要轉(zhuǎn)換成整數(shù)、實(shí)數(shù)、日期、字符串等內(nèi)存數(shù)據(jù)類型才可以進(jìn)一步處理,而文本的解析是個(gè)非常復(fù)雜的任務(wù)。

舉個(gè)例子,設(shè)想一下把文本“12345"轉(zhuǎn)成內(nèi)存二進(jìn)制整數(shù)12345的過(guò)程:

  1. 先設(shè)結(jié)果的初始值為0
  2. 拆出字符“1”,解析出數(shù)值1,將初值0乘以10加上這個(gè)1得到數(shù)值1
  3. 再拆出字符“2”,解析出數(shù)值2,把剛才的1乘以10和這個(gè)2相加得到數(shù)值12
  4. 再拆出字符“3”,解析出數(shù)值3,把剛才的12再乘以10加上這個(gè)3得到數(shù)值123
  5. ...

有些C程序員知道用函數(shù)atoi()可以實(shí)現(xiàn)字串到整數(shù)的轉(zhuǎn)換,僅僅一句代碼,看似非常簡(jiǎn)單,但其實(shí)背后的步驟非常多,CPU要干很多事才能完成這個(gè)動(dòng)作,耗時(shí)并不短。實(shí)際過(guò)程中還要判斷可能出現(xiàn)的非法字符(比如不是數(shù)字的字符),比上面描述的步驟還要更復(fù)雜得多。

整數(shù)還是最簡(jiǎn)單的數(shù)據(jù)類型,如果是實(shí)數(shù)還要處理小數(shù)點(diǎn),字符串解析時(shí)要考慮轉(zhuǎn)義字符和引號(hào)匹配,日期的解析更是要麻煩得多,因?yàn)楦袷椒N類太多,2018/1/10和10-1-2018都是常見(jiàn)的合法日期格式,甚至還有Jan-10 2018這種,要正確解析,就得嘗試用多種格式去匹配,CPU耗時(shí)很嚴(yán)重。

一般來(lái)講,外存數(shù)據(jù)訪問(wèn)的主要時(shí)間是在硬盤(pán)本身的讀取上,而文本文本的性能瓶頸卻經(jīng)常發(fā)生在CPU環(huán)節(jié)。因?yàn)榻馕龅膹?fù)雜性,CPU耗時(shí)很可能超過(guò)硬盤(pán)耗時(shí)(特別是采用高性能固態(tài)硬盤(pán)時(shí))。文本是非常慢的,需要高性能處理大數(shù)據(jù)時(shí)不要使用文本!

但是,有些原始數(shù)據(jù)(如日志)只有文本形式,解析文本就是不可避免的任務(wù)。這時(shí)候,一方面可以采用并行技術(shù),利用多CPU并行度更高的特性,由多個(gè)線程同時(shí)解析文本,這樣即使仍然串行訪問(wèn)硬盤(pán)也能獲得更高的文本處理性能;另一方面,這些數(shù)據(jù)如果需要反復(fù)使用,那么***是轉(zhuǎn)換成二進(jìn)制格式存儲(chǔ),第二次使用不要再次解析。

二進(jìn)制文件

二進(jìn)制文件中,我們會(huì)將各種數(shù)據(jù)類型對(duì)應(yīng)的內(nèi)存字節(jié)直接寫(xiě)出到文件中,再讀取時(shí)也只要直接取出重新裝載成內(nèi)存數(shù)據(jù),沒(méi)有復(fù)雜的解析過(guò)程,也不需要判斷和識(shí)別非法情況,這時(shí)性能就會(huì)好很多。

不過(guò),用二進(jìn)制數(shù)據(jù)存儲(chǔ)時(shí)需要考慮好壓縮手段,否則在某些極端情況下會(huì)比文本的存儲(chǔ)空間更大,雖然解析時(shí)間縮短,但硬盤(pán)訪問(wèn)時(shí)間會(huì)變長(zhǎng)。

比如整數(shù)1,用文本存儲(chǔ)時(shí)只要占一個(gè)字節(jié),即使加上分隔符也就兩個(gè)字節(jié)。而如果要把所有整數(shù)都按32位整數(shù)處理(當(dāng)前計(jì)算機(jī)的整數(shù)數(shù)據(jù)類型大多數(shù)是這個(gè)位長(zhǎng)),就需要用4個(gè)字節(jié)來(lái)存儲(chǔ),比文本大了一倍,有時(shí)可能還要加上數(shù)據(jù)類型本身的信息,就會(huì)更長(zhǎng)。

對(duì)于這種情況,合理的做法是根據(jù)數(shù)的大小決定位長(zhǎng),比如小整數(shù)只存儲(chǔ)一個(gè)字節(jié)或兩個(gè)字節(jié),大整數(shù)才存儲(chǔ)更多的字節(jié),因?yàn)樾≌麛?shù)較常見(jiàn),結(jié)果會(huì)使得總體存儲(chǔ)空間降低,從而獲得性能優(yōu)勢(shì)。

但是,壓縮率并不是越高越好,解壓縮需要消耗CPU時(shí)間。象上面說(shuō)的,把整數(shù)分大小存儲(chǔ)能夠減少空間,但在解析時(shí)就要多一重判斷,又降低一點(diǎn)性能。***采用的壓縮方案,要在硬盤(pán)空間的減少和CPU的消耗中取得某種平衡。如果一味地追求壓縮率(比如使用zip壓縮算法),空間是降低得更多,但CPU時(shí)間將會(huì)超過(guò)硬盤(pán)時(shí)間,整體性能反而下降。

不過(guò),無(wú)論如何,二進(jìn)制文件仍然是最快的存儲(chǔ)格式。采用簡(jiǎn)單壓縮方案的二進(jìn)制文件,即使同樣采用行式存儲(chǔ),一般也能達(dá)到比文本高4-5倍的性能。使用二進(jìn)制格式,還有可能使用前面文章中提到過(guò)的分段并行技術(shù)和列存技術(shù),從而獲得更高的性能。

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專欄
相關(guān)推薦

2017-05-19 22:46:36

多維后臺(tái)性能優(yōu)化手段

2011-12-30 09:49:30

網(wǎng)絡(luò)網(wǎng)絡(luò)安全

2017-05-25 08:56:22

硬盤(pán)性能特征

2018-02-25 22:44:01

RDBNoSQL數(shù)據(jù)庫(kù)

2016-10-31 14:25:15

智能醫(yī)療數(shù)據(jù)醫(yī)療信息化

2018-10-11 14:31:13

Kubernetes云原生

2017-05-21 22:32:39

報(bào)表性能優(yōu)化

2013-01-21 13:41:59

IBMdW

2017-10-09 22:33:56

SQL等值分組有序分組

2014-04-16 11:38:41

網(wǎng)絡(luò)·安全技術(shù)周刊

2014-07-14 13:54:57

IT技術(shù)周刊

2017-05-22 22:23:29

索引本質(zhì)排序

2017-05-24 17:08:29

OLAP

2015-09-14 10:41:51

PHP性能分析微觀分析

2017-06-14 23:08:29

報(bào)表數(shù)據(jù)計(jì)算層

2015-08-18 11:44:02

PHP性能分析宏觀分析

2018-06-29 10:28:43

UCloud存儲(chǔ)

2013-08-22 09:33:30

網(wǎng)絡(luò)·安全技術(shù)周刊

2017-10-18 22:34:33

SQL等值分組有序分組

2017-09-05 22:34:24

遍歷SQL運(yùn)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)