成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

第7期:硬盤的性能特征

企業動態
我們都知道內存比硬盤要快得多,大概能快出一兩個數量級(價格也要貴這么多)。不過硬盤的問題并不只是訪問速度慢。所謂頻繁小量訪問,是指運算過程中每次獲取的數據量很小,而讀取的次數很多。

硬盤的性能特征 

我們都知道內存比硬盤要快得多,大概能快出一兩個數量級(價格也要貴這么多)。不過,硬盤的問題并不只是訪問速度慢。

硬盤不適合做頻繁小量訪問

所謂頻繁小量訪問,是指運算過程中每次獲取的數據量很小,而讀取的次數很多。對于內存,每次取10字節、取1000萬次、總共訪問1億字節;和每次取1000萬字段、取10次、也訪問1億字節;這兩者耗時是差不多的。內存訪問數據的最小單位就是字節,無論怎么做,***涉及到的字節數是一樣的。

但硬盤的機制完全不同,在硬盤中數據是按扇區存放的,數據訪問的最小單位是扇區(一般是512字節),也就是說從硬盤上讀1個字節和讀512字節的時間幾乎一樣的(內存復制時間相對于硬盤時間忽略不計了)。這樣,每次取10字節取1000萬次,和每次取1000萬字節取10次,訪問量一樣,但耗時就可能會有巨大的差異,前者可能會多取很多無用的數據。

實際情況還要更惡劣一些,我們常常直接使用操作系統中的文件存儲數據,而大部分文件系統的讀取單位是簇,缺省大小一般是4K,比512字節要大8倍。而且,讀取硬盤是一個復雜的動作,不象內存那樣執行一條CPU指令就可以讀取,訪問硬盤需要一系列的動作來啟動硬盤控制器并確定讀取位置,讀取1000萬次就要執行1000萬次這樣的動作,當然一次讀1000萬字節時也會涉及較多次的磁盤動作(1000萬字節會在很多扇區中),但總次數仍然會少得多,批量不頻繁讀取的性能就會遠遠好于頻繁小量讀取。

不連續的隨機訪問是罪魁

不過,我們在上述結論中用了“可能”二字,而沒有用肯定的語氣,這是因為還要考慮數據存儲是否連續。如果要訪問的數據在硬盤上是連續存儲的,那取1000萬次10字節也不會很慢,因為后面的10字節已經在前面讀出的扇區里面而不必再讀,硬盤控制器以及操作系統都有緩存功能,實際硬盤讀取次數并沒有那么多,結果的性能相差也不會非常大。所以我們還要在"頻繁小量"前面加上“隨機”這個定語,也就是讀取的內容不連續,這時候,前面讀出的扇區取出需要的部分外,其它內容和后面要訪問的數據沒有關系,只能浪費掉,而且后面再訪問又要再次讀,”可能“就會變成”肯定“了。

對于目前仍在大量采用的機械硬盤,隨機訪問還存在磁頭跳動問題,也就是硬盤指標中的平均尋道時間。尋道是個非常慢的機械動作,比讀一個扇區要慢得多得多。這樣,即使每次讀出扇區(簇)都沒有任何浪費,在隨機訪問時的尋道成本卻可能超過讀取本身。使用機械硬盤時要特別注意避免隨機頻繁小時訪問。

固態硬盤的情況要好一些,它沒有尋道的機械動作了,這樣在隨機讀取時也沒有尋道時間問題。不過,盡管固態硬盤并不是按扇區形式存儲數據,操作系統仍將它模擬得和機械硬盤類似,必須按某個基本單位(簇)讀寫,這樣,隨機的頻繁小量(小于簇)訪問g還是會有前述的低效問題。對于許多需要隨機訪問小量數據的運算,簇(扇區)這個單位太大了。

并行和并發導致隨機訪問

那么,對于只需要連續批量訪問的運算(比如遍歷匯總或查找),使用硬盤時的性能是否就只是其本身訪問速度決定的呢?

對于單線程或單任務的運算基本上是這樣。但現在研究高性能計算時顯然不可能不考慮并行運算,而且許多運算服務也需要支持多并發。并行和并發運算會使原本可以連續訪問的硬盤數據一定程度變成隨機訪問,原因很簡單:多線程實際上在共享同一套硬盤,不同線程的訪問請求顯然不會連續,硬盤要同時響應這些請求就會發生跳動,也就是隨機訪問了。

對于機械硬盤這個后果常常很嚴重,如果線程之間切換頻繁,就會導致頻繁的尋道動作,結果就會發生多線程反而比單線程慢的現象。而有些單任務時性能尚可的場景,一旦并發了性能就會急劇下降。一個補救的辦法是加大讀數據的緩沖區,每個線程每次讀出的數據足夠多且連續,這樣能使尋道時間占比變小而感覺不明顯。但同時也會加劇內存占用,線程越多對內存需求越大。固態硬盤就好得多,緩沖區達到簇(扇區)的規模就可了。

有點類似的場景是列式存儲,數據是按列連續存放的,需要多列計算時,即使單線程也會發生硬盤隨機訪問現象,涉及列較多時就未必會比行存有優勢,多線程還會進一步加劇這個問題。在機械硬盤上用列存時要特殊注意這個問題,不一定總能提高性能。

外存運算需要采用不同的算法

由于硬盤的這些特征,有些運算從內存換到外存時會采用完全不同的方法,性能下降的程度也不是簡單按比例做乘法。

比較典型的是JOIN運算,對于外鍵式1:N的JOIN,如果數據全部在內存中,可以使用針對外鍵維表主鍵做HASH索引,遍歷事實表時用索引直接可以找到維表的相應記錄,事實表有多個外鍵指向不同維表時也只要遍歷一次就可以全解析。但如果維表過大而不能裝入內存時就不能采用同樣的算法了,因為硬盤無法支持隨機頻繁小量的訪問,而訪問維表記錄恰恰是這種運算,強行使用這種方案的性能會惡劣到還不如把數據先排序再來歸并的地步。外存大表JOIN時要按鍵值(的HASH值)分段,每段都足夠小可以裝入內存做JOIN,這種方法一次只能解析掉一個關聯,事實表指向多個外鍵大維表時就要做多輪解析,運算量比內存JOIN大得多。

單機內存不足時還可以利用集群來避免復雜的外存運算。網絡本身的延遲和硬盤差不多,通過網絡獲取集群機的內存數據時,單位數據量的訪問性能不會比硬盤好多少,但卻可以利用內存的隨機訪問能力和并發能力。不過網絡和硬盤類似,每次啟動一個網絡連接的消耗較大,也不合適頻繁小量的訪問,要把多次獲取數據的請求和返回結果積累起來一起傳輸。用這種方法做大維表JOIN,比內存計算麻煩,但比外存運算還是簡單很多,仍然可以一次性解析掉多個關聯。

責任編輯:杜寧 來源: 51CTO專欄
相關推薦

2018-02-06 23:30:07

文件存儲數據

2018-02-25 22:44:01

RDBNoSQL數據庫

2009-05-31 10:00:26

2017-05-19 22:46:36

多維后臺性能優化手段

2017-05-21 22:32:39

報表性能優化

2013-05-08 10:31:29

網絡·安全技術周刊

2013-01-21 13:41:59

IBMdW

2009-12-15 10:12:51

2017-10-09 22:33:56

SQL等值分組有序分組

2018-01-05 09:57:00

機械硬盤性能

2017-05-24 17:08:29

OLAP

2017-05-22 22:23:29

索引本質排序

2012-07-10 17:45:30

開發技術周刊

2017-06-14 23:08:29

報表數據計算層

2017-09-05 22:34:24

遍歷SQL運算

2017-10-18 22:34:33

SQL等值分組有序分組

2018-06-29 10:28:43

UCloud存儲

2011-04-08 18:16:51

Linux運維趨勢電子雜志

2018-01-18 20:47:18

CPU數據線程

2018-01-24 07:45:51

數據倍增分段列存
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 可以免费观看的av片 | 精品国产欧美一区二区三区成人 | 少妇性l交大片免费一 | 天天操夜夜操 | 久久国产精品一区二区三区 | 日日天天| 91精品国产乱码久久蜜臀 | 日韩欧美在线视频 | 人人鲁人人莫人人爱精品 | 久久99网| 精品一区二区三区在线观看 | 亚洲高清一区二区三区 | 色999日韩 | 91在线免费观看 | 国产黄色在线观看 | 黄页网址在线观看 | 欧美一区二区三区免费电影 | 99久久精品国产一区二区三区 | 色男人的天堂 | 亚洲精品乱码久久久久久蜜桃91 | 欧美一级在线 | 一区二区三区四区在线视频 | 成人不卡视频 | 在线观看av不卡 | 久久国产亚洲精品 | 国产精品成人一区二区 | 成人免费观看男女羞羞视频 | 在线观看午夜视频 | 特级特黄特色的免费大片 | 成人在线视频一区二区三区 | 亚洲男人网 | 国产真实精品久久二三区 | 国产精品久久久久久238 | 黄色大全免费看 | 久久久久黑人 | 精品综合视频 | 91精品国产麻豆 | 亚洲精品一区二区在线观看 | 天堂免费看片 | 亚洲精品视频在线观看视频 | 日本一区二区三区在线观看 |