首頁歷史 > 正文

如果能物理地減少資料儲存量,也就自然而然地減少了外存訪問量

2022-01-18由 資料派THU 發表于 歷史

如果能物理地減少資料儲存量,也就自然而然地減少了外存訪問量

作者:蔣步星

本文共2600字,建議閱讀

9分鐘。

如果能物理地減少資料儲存量,也就自然而然地減少了外存訪問量。

如果能物理地減少資料儲存量,也就自然而然地減少了外存訪問量

我們知道,外存(硬碟)的效能遠遠低於記憶體,即使是同樣複雜度的運算(CPU計算量相同),如果能減少外存的訪問量,也會大大提高整體效能。甚至有時我們需要用CPU換硬碟,即寧可多消耗些CPU時也要減少硬碟訪問量,一方面CPU效能更好,另一方面是CPU比硬碟更容易並行,現代計算機的CPU核數常常遠遠超過硬碟的併發訪問能力,資料密集型的任務應當更多地使用CPU的能力。

如果能物理地減少資料儲存量,也就自然而然地減少了外存訪問量。

列存是常見的減少外存訪問量的手段,不過,僅僅是簡單地採用列式儲存,並不會真正地減少資料儲存量。但是,使用列存之後,資料的可壓縮性將大大提高。同一列的資料一般具體有相同的資料型別甚至近似的取值,大多數壓縮演算法在這種情況的工作效果要比針對雜亂型別資料時好很多,這樣就能大幅度地減少資料儲存量了。所以,列存不僅是在訪問量上佔便宜,即使訪問表中所有列,列存的硬碟讀取量要也比行存更少。在表的列數不多時,列存仍然有優勢。

通用的壓縮演算法不能假定資料有某種特徵,只能是將資料當作隨意的位元組流去編碼,有時並不能獲得最好的壓縮率。而且,高壓縮率的演算法常常會消耗過多的CPU,甚至於會到了拿CPU換硬碟都不划算的地步。所以,我們不能完全指望壓縮演算法,還要自己先對資料做一些手腳,人為地製造某些資料特徵來利用,就可以採用較低壓縮率同時低CPU消耗的壓縮演算法,也獲得較好的壓縮效果。

一個常用的辦法是排序。

資料表的列中常常有許多是維度,比如地區、日期等。這些維度的取值基本都在一個小集合範圍內,在大資料量時會有很多重複取值。如果資料是按這些列排序的,則相鄰記錄之間取值相同的情況就很常見,而這時使用很輕量級的壓縮演算法也能獲得很好的壓縮率,簡單來講,直接記錄列值及其重複次數都能起到不錯的壓縮效果。

排序時的次序也有講究。要儘量把取值較長的列放在前面排序。比如有地區和性別兩個列,地區的取值長度要大於性別,則先地區後性別排序的效果就要好於反過來的情況。

先地區排序:

如果能物理地減少資料儲存量,也就自然而然地減少了外存訪問量

先性別排序:

如果能物理地減少資料儲存量,也就自然而然地減少了外存訪問量

週五

前者儲存:北京(3個),上海(2個);男(2個),女(1個),男(1個),女(1個);總字元數為8(只數字元個數,括號中的次數不記)。

後者儲存:北京(2個),上海(1個),北京(1個),上海(1個);男(3個),女(2個);總字元為10。

地區的字元數比性別要長,把長的排到前面的儲存量會更小。

上面的例子中,我們還可以把“北京”、“上海”這些字串事先轉換成數字編碼,而不要直接使用原始字串,這樣也能減少儲存量。“北京”是個2個字元的串,如果用數字1代替就變成1個字元了。有些列舉形字串列的取值很長,轉換成數字編碼會有很好的效果。做了編碼轉換後,在使用的時候會有些麻煩,需要再轉換回來。不過,和獲得的效能提升相比,這些麻煩還是值得的。

整數(從字串編碼而來或本身就是整數)的儲存也有些技巧。現代計算機的整數一般是32位的,要佔4個位元組。但很多整數很小,比如從省份轉換過來的整數不會超過100,這4個位元組的高3位元組全是0,有些浪費;性別轉換過來的只有1和2兩種,而4個位元組的整數甚至長於1或2個位元組的“男”,“女”值本身了,這個轉換反而不划算了。

這時候就要設計合理的編碼方式,不要讓所有整數都佔用同樣長度的空間,讓小正整數只用1-2個位元組就能表示,大正整數以及負整數(負數很罕見)才要佔滿4個位元組,甚至5個位元組(否則資訊空間是不夠的),因為小正整數更常見,整體儲存空間還是會變少。

類似的技巧還可以用於日期儲存上,一般來講與某個確定日期距離較近的且過去的日期會更多一些,這時可採用某種編碼方式讓這些值變短,而距離遠的以及將來的日期可以使用長編碼。

這些編碼方案看起來很不起眼,一次只能減少一兩個位元組,但當資料量很大時效果就相當可觀。

對於應用程式設計師來講,一般不會直接控制到這種細節層面了。不過,瞭解所選用的資料庫(或別的有資料儲存功能的產品)採用的壓縮手段還是有必要的,這樣才能更準確地預估運算效能。

專欄作者簡介

如果能物理地減少資料儲存量,也就自然而然地減少了外存訪問量

潤乾軟體創始人、首席科學家

清華大學計算機碩士,中國大資料產業生態聯盟專家委員,著有《非線性報表模型原理》等,1989年,中國首個國際奧林匹克數學競賽團體冠軍成員,個人金牌;2000年,創立潤乾公司;2004年,首次在潤乾報表中提出非線性報表模型,完美解決了中國式複雜報表製表難題,目前該模型已經成為報表行業的標準;2014年,經過7年開發,潤乾軟體釋出不依賴關係代數模型的計算引擎——集算器,有效地提高了複雜結構化大資料計算的開發和運算效率;2015年,潤乾軟體被福布斯中文網站評為“2015福布斯中國非上市潛力企業100強”;2016、2017年,榮獲中國電子資訊產業發展研究院評選的“中國軟體和資訊服務業十大領軍人物”;2017年度中國資料大工匠、資料領域專業技術講堂《資料蔣堂》創辦者。

— 完 —

關注清華-青島資料科學研究院官方微信公眾平臺“

THU資料派

”及姊妹號“

資料派THU

”獲取更多講座福利及優質內容。

頂部