溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫常用的壓縮算法有哪些

發(fā)布時(shí)間:2021-07-29 17:23:53 來源:億速云 閱讀:567 作者:Leah 欄目:數(shù)據(jù)庫

數(shù)據(jù)庫常用的壓縮算法有哪些,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

  數(shù)據(jù)庫常用的壓縮算法怎么解讀

  最早的列式數(shù)據(jù)庫Sybase IQ 使用的是一種Decomposed 模型, 簡單的將每一列分開,然后用rowid 來標(biāo)記每一行的位置。

  后來的列式數(shù)據(jù)庫基本上都不用rowid 來標(biāo)記每一列的位置, 并且對(duì)于每一個(gè)Block 的數(shù)據(jù)一定是先計(jì)算那一列具有最高選擇性(唯一值最少),然后依次以選擇性來排序從而可以不使用rowid 標(biāo)記行的位置。

  而由于排序之后相同的值在一起的機(jī)會(huì)更大,所以壓縮率也就比普通的簡單列儲(chǔ)存(也即上面介紹的Decompose模型) 的壓縮率大很多倍。

  常見的列式數(shù)據(jù)庫壓縮算法有如下幾種:

  當(dāng) 數(shù)據(jù)排序之后相同的值肯定在一起,并且在同一個(gè)Block 里面一個(gè)值壓縮后只會(huì)出現(xiàn)一遍。 注意這里的排序并不是指按照值大小的排序,比如5>1 , B>A 這種,而是值將相同的值聚在一起,按出現(xiàn)的頻率進(jìn)行排序( 類似group by 之后order by 每一個(gè)字段)。 比如:

  WWWWWWWWWWWWWWBBBBBBBBBZZZZZA1

  壓縮后就成為

  W14B9Z5A1

  按照出現(xiàn)的頻率進(jìn)行先后順序排序。 只要計(jì)算每一個(gè)數(shù)值出現(xiàn)的次數(shù)就可以計(jì)算出當(dāng)前數(shù)值的起始rowid 和次數(shù)了。 這比較有利于進(jìn)行in , not in , group 等sql 操作。

  將每一個(gè)出現(xiàn)的值寫在Block 的頭部, 然后用1 和 0 來表示有或者沒有。 這種算法要求每一個(gè)出現(xiàn)的值都必須具有非常高的選擇性并且不同值之間差別不能大到幾十倍的差距,而不像Run Length Encoding 只需要整體的選擇性比較高就可以了。

  數(shù)據(jù)庫常用的壓縮算法怎么解讀

  行式數(shù)據(jù)庫的BitMap Index 一般是一個(gè)整體的文件塊(如果是local partition 當(dāng)然也是local index)。 列式數(shù)據(jù)庫的組織形式都是按每一個(gè)block 每一個(gè)block 的方式組織,它的bitmap index 出現(xiàn)的值都是按當(dāng)前block 出現(xiàn)的所有值組織的。 某些列式數(shù)據(jù)庫會(huì)有一些變種: 比如在1和 0 之間還加入Run length encoding 繼續(xù)壓縮或者加入Null Compression, 用來排除空值比較多的情況。

  Data Dictionary

  行 式數(shù)據(jù)庫的一般都是選用的這種方式,將Block 常用的值放在block 頭部, 實(shí)際出現(xiàn)這個(gè)值的地方用標(biāo)記代替,行式數(shù)據(jù)庫里面一般會(huì)有一個(gè)壓縮級(jí)別的東西,壓縮級(jí)別越高壓縮時(shí)間越長,收益越小,解壓縮時(shí)間不變。 列式數(shù)據(jù)庫的Data Dictionary 壓縮也是在block 的頭部存放壓縮之前的實(shí)際值,但是與行式數(shù)據(jù)庫不同的是列式數(shù)據(jù)庫會(huì)存放所有值,不管這個(gè)值即使只出現(xiàn)了一次,這樣便于它在不可見索引和延遲物化方面可以 不解壓數(shù)據(jù)就能進(jìn)行普通操作。

  Delta Compression

  delta壓縮適合在那些數(shù)據(jù)前半部分相同的情況下使用,比如很大的整數(shù)和長的有規(guī)律的字符串。 Delta 壓縮會(huì)記錄一個(gè)基礎(chǔ)值,然后在之后的每一個(gè)值只使用他們差別的部分,比如電話號(hào)碼,URL,地址,IP 之類的。

  LZO

  LZO或者其他類似的二進(jìn)制壓縮算法gzip,zip,rar,7zip。bzip等等在列數(shù)據(jù)庫里面也有使用,但是只適用于連讀取都非常少的歸檔數(shù)據(jù)(每次只讀非常少量的行數(shù))和大段的文本(網(wǎng)頁索引之類的)。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI