最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

GaussDB技術(shù)解讀系列之高級壓縮

2023-07-18 17:36 作者:Gauss松鼠會  | 我要投稿

本文作者?華為云數(shù)據(jù)庫GaussDB首席架構(gòu)師?馮柯

背景介紹

數(shù)據(jù)壓縮與關(guān)系數(shù)據(jù)庫的結(jié)合,早已不是一個新鮮的話題,當(dāng)前我們已經(jīng)看到了各種各樣數(shù)據(jù)庫壓縮的產(chǎn)品和解決方案。對于GaussDB來說,在今天引入數(shù)據(jù)壓縮,究竟能夠給客戶帶來什么不一樣的價值,是過去一段時間我們一直在思考的問題。

為了回答這個問題,我們首先對各種通用壓縮算法進(jìn)行了廣泛的測試,從性能最好的LZ4/Snappy,到性能與壓縮率均衡的Zstd/Zlib,再到強(qiáng)調(diào)壓縮率的LZMA/BZip。我們發(fā)現(xiàn):即使是性能最好的壓縮算法,仍然無法做到對一個在線數(shù)據(jù)庫的性能不產(chǎn)生顯著影響。我們也調(diào)研了數(shù)據(jù)庫領(lǐng)域的各種編碼方法,包括近幾年學(xué)術(shù)界發(fā)布的一些基于預(yù)測和線性擬合的編碼方法,從研究發(fā)布的測試結(jié)果及實測來看,數(shù)據(jù)庫編碼用于解決特定數(shù)值分布的可壓縮性問題,與壓縮算法的成熟度相比,當(dāng)前并沒有一種通用的數(shù)據(jù)庫編碼方法,能夠在大多數(shù)真實數(shù)據(jù)集中的場景下提供穩(wěn)定的壓縮率。

這是我們對于數(shù)據(jù)庫壓縮這個領(lǐng)域的一個基本技術(shù)判斷。過去的產(chǎn)品實踐也驗證了這一點,我們看到很多商業(yè)數(shù)據(jù)庫和開源數(shù)據(jù)庫都提供了對于壓縮的支持,絕大多數(shù)時候,留給客戶的選擇就是決定要不要在特定的表上開啟壓縮。開啟壓縮意味著空間節(jié)省,但同時意味著性能下降,這個看似簡單的選擇恰恰是客戶最難做的。這也是為什么有了這么多數(shù)據(jù)庫壓縮的產(chǎn)品,我們卻很少能看到數(shù)據(jù)壓縮真正廣泛應(yīng)用在數(shù)據(jù)庫在線業(yè)務(wù)中的根本原因。

這給了我們更多的啟示。我們相信,真正可被應(yīng)用的數(shù)據(jù)庫壓縮技術(shù),能夠去兼顧壓縮率與業(yè)務(wù)影響的平衡,應(yīng)該是選擇性的。即我們能夠基于技術(shù)去判定數(shù)據(jù)的溫度,并基于這樣的判定,去選擇性地壓縮業(yè)務(wù)中相對較冷的數(shù)據(jù),而不去碰那些相對較熱的數(shù)據(jù)。

這樣的技術(shù)選擇意味著我們無法去滿足所有業(yè)務(wù)場景,我們要求業(yè)務(wù)的數(shù)據(jù)溫度分布,必須滿足80-20分布規(guī)則。即我們?nèi)嚎s那些占用80%存儲需求、但只占用20%計算需求的冷數(shù)據(jù),而不去碰那些只占用20%存儲需求、但卻占用80%計算需求的熱數(shù)據(jù)。幸運的是,我們發(fā)現(xiàn)絕大多數(shù)對于容量控制有需求的業(yè)務(wù),都具備這樣的特征。

場景及目標(biāo)選擇

通過對大量業(yè)務(wù)場景的分析,我們發(fā)現(xiàn)業(yè)務(wù)對于數(shù)據(jù)庫壓縮技術(shù)的需求是多元化的,有在線交易業(yè)務(wù)(OLTP)存儲壓縮的場景,有分析業(yè)務(wù)(OLAP)存儲壓縮的場景,有歷史業(yè)務(wù)存儲壓縮的場景,也有容災(zāi)業(yè)務(wù)傳輸壓縮的場景。不同的場景,對于壓縮技術(shù)的訴求,如果從壓縮性能、壓縮率、解壓性能的三維指標(biāo)去看,從對業(yè)務(wù)侵入的容忍度去看,是完全不同的。

這意味著如果我們想要打造一個全場景的GaussDB高級壓縮特性,它應(yīng)該是多個技術(shù)的組合,包括不同的壓縮算法、不同的冷熱判定模型及方法、不同的數(shù)據(jù)存儲組織等,通過不同的技術(shù)組合及應(yīng)用去滿足不同的場景需求。

這同時意味著我們在不同壓縮適用場景的支持上需要有個優(yōu)先級的取舍。我們的答案是選擇去優(yōu)先支持OLTP存儲壓縮場景,這是我們認(rèn)為數(shù)據(jù)庫壓縮技術(shù)最有價值的業(yè)務(wù)領(lǐng)域,當(dāng)然也是技術(shù)挑戰(zhàn)最大的領(lǐng)域。

確定場景之后,接下來是確定技術(shù)目標(biāo),我們面向這個場景,究竟要打造什么樣的核心競爭力,這取決于我們對于典型客戶場景的分析。我們識別了兩類典型客戶場景:

場景A:客戶業(yè)務(wù)來自于IBM小機(jī),單庫容量50TB,遷移到開放平臺后,面臨容量過大和運維窗口過長問題。選擇拆庫意味著分布式改造,對于一個已經(jīng)穩(wěn)定運行許多年的存量關(guān)鍵業(yè)務(wù)來說,這種技術(shù)選擇風(fēng)險過高。選擇壓縮可以顯著降低容量風(fēng)險,但業(yè)務(wù)最初的設(shè)計并沒有考慮冷熱分離(比如基于時間維度建立分區(qū)),需要一種零侵入的壓縮技術(shù)支持,同時對業(yè)務(wù)性能影響足夠低。

場景B:客戶業(yè)務(wù)基于分布式集群部署,單集群容量已經(jīng)超過1PB,并且仍在快速增長,需要定期擴(kuò)容。選擇壓縮可以降低擴(kuò)容頻率,顯著降低業(yè)務(wù)的軟硬件成本,并減少變更風(fēng)險。但業(yè)務(wù)的數(shù)據(jù)分布設(shè)計是面向擴(kuò)展性的(比如基于用戶維度建立分區(qū)),沒有考慮冷熱分離,因此同樣的,業(yè)務(wù)需要一種零侵入的壓縮技術(shù)支持,同時對性能影響足夠低。

通過對客戶典型場景的需求梳理,我們確定了GaussDB OLTP存儲壓縮的基本設(shè)計目標(biāo):

1.?冷熱判定對業(yè)務(wù)應(yīng)該是零侵入的,不應(yīng)對業(yè)務(wù)的已有數(shù)據(jù)分布、邏輯模型有任何依賴;

2.?對業(yè)務(wù)影響必須足夠低,我們定義目標(biāo)低于10%,并挑戰(zhàn)5%;

3.?提供合理的壓縮率,我們定義目標(biāo)不低于2:1。

基本設(shè)計目標(biāo)的定義,使得我們能夠?qū)⒑罄m(xù)每個具體場景中的技術(shù)選擇都變成一個確定性問題。

冷熱判定

確定設(shè)計目標(biāo)后,我們開始進(jìn)行工程落地。有三個問題需要解決:1)如何實現(xiàn)對數(shù)據(jù)的冷熱判定;2)如何實現(xiàn)壓縮后數(shù)據(jù)的存儲組織;3)如何實現(xiàn)有競爭力的壓縮算法。

對于冷熱判定,首先要確定判定的粒度。數(shù)據(jù)的冷熱判定可以基于不同粒度實現(xiàn),行級、塊級或表/分區(qū)級,粒度越粗,實現(xiàn)的復(fù)雜度越低,但對業(yè)務(wù)的侵入也越大?;谠O(shè)計目標(biāo),很自然的,我們選擇行級的冷熱判定,這是對業(yè)務(wù)數(shù)據(jù)分布依賴最小的方案,我們需要解決的,是如何控制引入冷熱判定的代價。

我們利用GaussDB存儲引擎已有的機(jī)制巧妙地解決了這一問題。具體來說,GaussDB存儲引擎在每行數(shù)據(jù)的元數(shù)據(jù)Meta中記錄了最近一次修改該行的事務(wù)ID(XID),該信息被用來支持事務(wù)的可見性判定,從而實現(xiàn)多版本并發(fā)控制(MVCC)。對于特定行來說,如果其XID足夠“老”,老到它對所有當(dāng)前已經(jīng)活躍的事務(wù)都可見,那么這時候我們實際上已經(jīng)不關(guān)注XID的具體值,我們可以通過引入一個特定的標(biāo)志位(FLG)來記錄這一點,而原來XID中填充的值可以被一個物理時間來代替,這個物理時間就表征了其所屬行最后一次修改時間的上限(LMT,Last Modified Time)。很顯然,LMT可以用來支持冷熱判定(具體見圖1):

圖1:行級冷熱判定

上述方案的好處是引入LMT并沒有增加額外開銷,對業(yè)務(wù)的邏輯模型也沒有任何依賴,在大多數(shù)時候,如果不是特別嚴(yán)格要求,業(yè)務(wù)可以定義一個簡單的規(guī)則來實現(xiàn)冷熱判定,比如:

AFTER 3 MONTHS OF NO MODIFICATION

此時系統(tǒng)會掃描目標(biāo)表,對于所有滿足當(dāng)前時間減去LMT超過3個月的行進(jìn)行壓縮。

注意在上述方案中,我們實際上只識別了行的寫熱點,但并沒有識別行的讀熱點,我們只知道滿足條件的行3個月內(nèi)未發(fā)生任何更新,但我們無法確認(rèn)這些行在3個月內(nèi)是否被頻繁讀取。維護(hù)行的讀熱點,目前從技術(shù)上沒有低成本的解決方案。對于像訂單明細(xì)這樣的流水類業(yè)務(wù),這個方案可以很好地工作,因為數(shù)據(jù)的讀和寫呈現(xiàn)出相同的溫度特征,其訪問頻率隨著未修改時間的增加不斷衰減。但對于像手機(jī)相冊這樣的收藏類業(yè)務(wù),僅識別寫可能是不夠的,因為一個很早建立的收藏關(guān)系仍然可能被頻繁訪問。

這意味著,即使系統(tǒng)進(jìn)行了冷熱判定,我們?nèi)匀恍枰?yōu)化業(yè)務(wù)可能訪問壓縮數(shù)據(jù)的場景,我們把這個問題留給了存儲組織和壓縮算法,對于壓縮算法來說,我們更關(guān)注其解壓性能。

另一個問題是在某些場景下,使用默認(rèn)的冷熱判定可能是不夠的,比如對于某些類型的交易而言,其產(chǎn)生的訂單明細(xì)可能在3個月內(nèi)確實不會被修改,但會在達(dá)到一個特定的觸發(fā)條件后被更新(比如解凍擔(dān)保交易)。這種場景在實際業(yè)務(wù)中并不常見,但如果業(yè)務(wù)確實關(guān)注性能,那么我們支持在默認(rèn)的冷熱判定規(guī)則以外,允許業(yè)務(wù)自定義規(guī)則,比如:

AFTER 3 MONTHS OF NO MODIFICATION ON (order_status = "finished")

此時系統(tǒng)會僅壓縮3個月未修改、且訂單狀態(tài)已經(jīng)完結(jié)的數(shù)據(jù)。

當(dāng)前我們支持的自定義規(guī)則,是任意合法的行表達(dá)式,業(yè)務(wù)可以寫任意復(fù)雜的表達(dá)式來表征數(shù)據(jù)的冷熱判定規(guī)則,但表達(dá)式中所引用的任何字段,只能是目標(biāo)表上的合法字段。通過這種默認(rèn)和自定義規(guī)則的組合使用,我們提供了業(yè)務(wù)足夠低的使用門檻和更好的靈活性。

存儲組織

當(dāng)滿足冷熱判定條件的行被壓縮時,我們需要決定如何存儲這些壓縮后的數(shù)據(jù),基于設(shè)計目標(biāo),我們選擇了對業(yè)務(wù)侵入最小的存儲組織實現(xiàn)——塊內(nèi)壓縮。

我們知道關(guān)系數(shù)據(jù)庫的存儲組織都是基于固定長度的分塊的,在GaussDB數(shù)據(jù)庫中,典型的數(shù)據(jù)塊大小為8KB,選擇更大的數(shù)據(jù)塊顯然有利于壓縮,但對業(yè)務(wù)性能會造成更大的影響。所謂塊內(nèi)壓縮,是指:1)單個塊內(nèi)所有滿足冷熱判定條件的行,會作為一個整體進(jìn)行壓縮;2)壓縮后形成的數(shù)據(jù)就存放在當(dāng)前的數(shù)據(jù)塊中,存放區(qū)域稱為BCA(Block Compressed Area),它通常位于塊的尾部。

塊內(nèi)壓縮的設(shè)計意味著解壓任何數(shù)據(jù)只依賴于當(dāng)前塊,而不需要訪問其它的數(shù)據(jù)塊,從壓縮率的視角看,這樣的設(shè)計并不是最友好的,但它非常有利于控制業(yè)務(wù)影響。注意在我們前面的討論中,即使業(yè)務(wù)定義了冷熱判定條件,仍然存在一定的概率會訪問壓縮數(shù)據(jù),我們希望這個訪問代價能夠有一個確定性的上限。

圖2給出了塊內(nèi)壓縮的詳細(xì)流程:首先,當(dāng)壓縮被觸發(fā)時,系統(tǒng)掃描數(shù)據(jù)塊中的所有行,根據(jù)指定的冷熱判定條件,識別出R1和R3是冷數(shù)據(jù)(圖2(a));接著,系統(tǒng)將R1和R3作為一個整體進(jìn)行壓縮,將壓縮后的數(shù)據(jù)就存放在該數(shù)據(jù)塊的BCA中(圖2(b));如果業(yè)務(wù)后續(xù)需要更新R1,那么系統(tǒng)會為更新后的數(shù)據(jù)生成一個新的拷貝R4,并標(biāo)識BCA中的R1已經(jīng)被刪除(如圖2(c));最后,當(dāng)系統(tǒng)在該數(shù)據(jù)塊上需要更多空間時,可以回收BCA中屬于R1的空間(圖2(d))。

圖2:塊內(nèi)壓縮

在整個設(shè)計中有兩點需要注意:1)我們實際上只壓縮了用戶數(shù)據(jù)Data,并沒有壓縮相應(yīng)的元數(shù)據(jù)Meta,后者通常用來支持事務(wù)的可見性;2)我們支持將冷數(shù)據(jù)重新變?yōu)闊釘?shù)據(jù),以消除因為冷熱誤判而帶來的影響。同樣地,從壓縮率的視角,這樣的設(shè)計并不是最友好的,但它極大地減少了對業(yè)務(wù)的侵入。簡單來說,業(yè)務(wù)對于壓縮數(shù)據(jù)的訪問,與正常數(shù)據(jù)完全相同,在功能上沒有任何限制,在事務(wù)語義上也沒有任何差別。這是非常重要的原則:我們的OLTP存儲壓縮對于業(yè)務(wù)是完全透明的,這是當(dāng)前這個特性,以及后續(xù)GaussDB高級壓縮系列所有特性都將遵循的基本原則。

壓縮算法

基于設(shè)計目標(biāo),如果從壓縮率、壓縮性能、解壓性能的三維指標(biāo)來看,我們實際上需要的是一個能夠提供合理的壓縮率、合理的壓縮性能、但是極致的解壓性能的壓縮算法,這是我們壓縮算法設(shè)計的基礎(chǔ)。

我們首先測試了直接使用LZ4進(jìn)行壓縮,LZ4是目前已知的壓縮性能和解壓性能最好的開源三方庫,從實測結(jié)果看,LZ4的壓縮率是偏低的。我們仔細(xì)分析了其算法原理,LZ4是基于LZ77算法的一種實現(xiàn),LZ77算法的思想非常簡單,就是把要壓縮的數(shù)據(jù)看成一個字節(jié)流,算法從字節(jié)流的當(dāng)前位置開始,前向?qū)ふ液彤?dāng)前位置相同的匹配字符串,然后用匹配到的字符串的長度以及與當(dāng)前位置的偏移,用來表示被匹配的字符串,從而達(dá)到壓縮的效果。從算法原理上看,LZ77算法對于長文本會有比較好的壓縮效果,但是對于結(jié)構(gòu)化數(shù)據(jù)中大量的短文本以及數(shù)值類型,效果就有限,我們實際的測試也驗證了這一點。

接下來,我們將壓縮算法分為了兩層:第一層,我們按列對一些數(shù)值類型進(jìn)行了編碼,我們選擇了簡單的差值編碼,這種編碼足夠輕量級,解壓特定字段不需要依賴其它字段的值;第二層,我們將編碼后的數(shù)據(jù)再調(diào)用LZ4進(jìn)行壓縮。注意在第一層中,我們實際上是按列編碼、按行存儲,這和業(yè)界的一般實現(xiàn)(按列編碼并存儲)有很大不同,按列存儲對壓縮率會更加友好,但是按列存儲意味著同一行的數(shù)據(jù)會被分散到BCA的不同區(qū)域,這種傳統(tǒng)的設(shè)計無法支持我們后續(xù)希望實現(xiàn)的部分解壓,我們將在結(jié)束語中更詳細(xì)地說明這一問題。

通過實測,我們發(fā)現(xiàn)這種列編碼+通用壓縮的實現(xiàn)方式有效地提升了壓縮率,同時控制了業(yè)務(wù)影響的明顯增加,但兩層實現(xiàn)之間是松耦合的,這引入了許多額外的開銷。因此我們在仔細(xì)權(quán)衡之后,決定放棄LZ4,而是完全基于LZ77算法,重新實現(xiàn)一個緊耦合的壓縮算法。

這在當(dāng)時看來是一個非常冒險的嘗試,事實上,在我們之前,還沒有任何數(shù)據(jù)庫內(nèi)核團(tuán)隊,會選擇自己去實現(xiàn)一個通用壓縮算法。但從最后取得的收益來看,我們實際上是打開了一扇全新的大門。當(dāng)列編碼與LZ77算法之間的邊界被打破時,我們引入了一系列的優(yōu)化創(chuàng)新,考慮篇幅原因,我們無法展現(xiàn)全部技術(shù)細(xì)節(jié),在這里,我們只介紹兩個小的優(yōu)化:

第一個優(yōu)化是內(nèi)置行邊界。我們發(fā)現(xiàn),當(dāng)系統(tǒng)采用兩層壓縮算法后,我們需要額外地保存每一行數(shù)據(jù)在編碼后的長度,因為我們需要在LZ77算法解壓后找到每一行的邊界,這是一個不小的開銷。為了消除這個開銷,我們選擇在LZ77的編碼格式中嵌入一個行邊界的標(biāo)記,這個標(biāo)記只占用了1個位,其開銷較現(xiàn)有方案大幅降低。當(dāng)然,這個標(biāo)記位被占用后,LZ77前向搜索的最大窗口長度減少了一半,但在我們這個場景中,這并不是什么問題,因為我們的典型頁面長度只有8KB。

第二個優(yōu)化是2字節(jié)短編碼。原有LZ4的實現(xiàn)中,為了提高壓縮性能,系統(tǒng)使用3字節(jié)編碼來描述一個匹配,這意味著系統(tǒng)能夠識別的最短匹配為4字節(jié)。但是在結(jié)構(gòu)化數(shù)據(jù)中,3字節(jié)的匹配是非常普遍的,參考下面一個例子:

A = 1 … B = 2

其中,A和B是同一行數(shù)據(jù)中的兩個整數(shù)型字段,它們的值分別為1和2,基于當(dāng)前的字節(jié)序,該行數(shù)據(jù)實際在內(nèi)存中存放的形式如下所示:

01?00 00 00?… 02?00 00 00

注意上面標(biāo)紅的部分,很明顯,這里面有一個3字節(jié)的匹配,但是它無法被LZ4識別。

我們通過在LZ77算法中額外引入2字節(jié)短編碼來解決這一問題,2字節(jié)短編碼可以識別最小3字節(jié)的匹配,從而相對LZ4能夠提升壓縮率。

當(dāng)然,引入短編碼會有額外的開銷:其一,壓縮性能會有一定程度的下降,因為我們需要建立兩個獨立的HASH表,幸運的是,在我們這個場景中,極致壓縮性能并不是我們追求的目標(biāo);其二,2字節(jié)編碼減少了表達(dá)匹配串與被匹配串之間距離的位寬,這意味著3字節(jié)的匹配必須離得更近才能被識別,在我們這個場景中,這并不是什么問題,因為相對于這個限制,一個典型數(shù)據(jù)行的長度已經(jīng)是足夠小的。

效果評估

我們使用標(biāo)準(zhǔn)的TPCC測試來評估啟用OLTP存儲壓縮特性對業(yè)務(wù)的影響。TPCC模型共包含9張表,其中空間會動態(tài)增長的流水表共有3張,在這3張表中,訂單明細(xì)表(Orderline表)的空間增長比其它表多一個數(shù)量級,因此我們選擇在這張表上開啟壓縮?;赥PCC的業(yè)務(wù)語義,每筆訂單一旦完成配送,其訂單狀態(tài)就進(jìn)入完結(jié)狀態(tài),完結(jié)的訂單不會再被修改,但仍有一定的概率被查詢?;谶@個語義,我們選擇冷熱判定原則為只壓縮已經(jīng)完結(jié)的訂單。

我們分別測試了在不開啟壓縮和開啟壓縮狀態(tài)下系統(tǒng)的性能值,結(jié)果如圖3所示:

圖3:業(yè)務(wù)影響評估

測試結(jié)果表明:在TPCC測試場景下,開啟壓縮與不開啟壓縮相比,系統(tǒng)性能大概降低了1.5%。這是一個非常不錯的結(jié)果,這意味著即使在超過百萬tpmC的業(yè)務(wù)峰值場景中,系統(tǒng)也可以開啟壓縮。我們不知道在此之前,業(yè)內(nèi)是否有其它數(shù)據(jù)庫產(chǎn)品也能夠達(dá)到這一水平。

我們測試了Orderline表的壓縮率,作為更豐富的數(shù)據(jù)集,我們同時選擇了TPCH模型中的4張表(Lineitem、Orders、Customer、Part表)進(jìn)行測試。為了便于比較,對于每個數(shù)據(jù)集,我們同時測試了LZ4、ZLIB和我們的壓縮算法的壓縮率表現(xiàn),其中ZLIB是強(qiáng)調(diào)壓縮解壓性能和壓縮率均衡的算法,其壓縮解壓性能較LZ4低了5-10倍。最終結(jié)果如圖4所示:

圖4:壓縮率評估

測試結(jié)果與我們預(yù)期的相符,在數(shù)值型字段較多時,我們的壓縮算法的壓縮率要高于所有通用壓縮算法,但在文本型字段較多時,我們的壓縮算法的壓縮率會介于LZ類和LZ + Huffman組合類的壓縮算法之間。

運維TIPS

注意我們的壓縮方案實際上是離線的,也就是數(shù)據(jù)剛生成時必然是熱數(shù)據(jù),它們不會觸發(fā)壓縮,業(yè)務(wù)訪問這些數(shù)據(jù)的性能也不會受任何影響;隨著時間的推移,這些數(shù)據(jù)的溫度會逐漸降低,最終被獨立的壓縮任務(wù)識別為冷數(shù)據(jù)并進(jìn)行壓縮。

選擇在業(yè)務(wù)低峰期運行這些壓縮任務(wù)、并控制其資源消耗是運維端需要關(guān)注的問題。在這塊我們提供了豐富的運維手段,包括指定運維窗口、壓縮任務(wù)的并行度、每個壓縮任務(wù)的壓縮數(shù)據(jù)量等。對于絕大多數(shù)業(yè)務(wù)來說,單位時間內(nèi)新增的數(shù)據(jù)量實際是比較有限的,因此業(yè)務(wù)也可以選擇一個特定的時間段集中完成壓縮任務(wù),比如每個月第一天的凌晨兩點到四點,完成3個月前新增冷數(shù)據(jù)的壓縮。

業(yè)務(wù)在決定開啟壓縮之前,可能希望先了解開啟壓縮后的收益,并根據(jù)收益大小做出決策。為此我們提供了一個壓縮率評估工具,能夠?qū)δ繕?biāo)表的數(shù)據(jù)進(jìn)行采樣,并使用和實際壓縮過程完全相同的算法對采樣數(shù)據(jù)進(jìn)行壓縮,計算壓縮率,但不會實際生成BCA,不會修改任何數(shù)據(jù)。

如果業(yè)務(wù)將壓縮數(shù)據(jù)遷移到另一個表,可能會導(dǎo)致所有數(shù)據(jù)從壓縮狀態(tài)變?yōu)榉菈嚎s狀態(tài),從而導(dǎo)致空間膨脹,這并非我們的方案引入的,而是所有壓縮方案都需要解決的問題。如果冷熱判定規(guī)則非常確定,那么業(yè)務(wù)可以手動執(zhí)行壓縮任務(wù)使壓縮立即生效;對于耗時較長的大容量壓縮表的遷移,業(yè)務(wù)仍然可以選擇定期地開啟自動壓縮任務(wù)來完成。

最后,對于壓縮的開啟和關(guān)閉,我們提供最細(xì)粒度的控制,無論是普通表、普通分區(qū)表中的單個分區(qū),還是二級分區(qū)中的任意單個分區(qū)、子分區(qū),業(yè)務(wù)都可以單獨開啟或關(guān)閉壓縮。這使得對于業(yè)務(wù)本身已經(jīng)對數(shù)據(jù)區(qū)分了冷熱(比如基于時間分區(qū))的場景,仍然可以和我們的壓縮特性很好地配合。

結(jié)束語

在OLTP表壓縮這個特性中,我們引入了一系列的技術(shù)創(chuàng)新,包括全新的壓縮算法、細(xì)粒度的自動冷熱判定和塊內(nèi)壓縮支持等,可以在提供合理壓縮率的同時,大幅度降低對業(yè)務(wù)的影響,我們希望這個特性能夠在支持關(guān)鍵在線業(yè)務(wù)的容量控制中發(fā)揮重要價值。

接下來我們還將在降低引入壓縮對業(yè)務(wù)的影響、部分解壓特性、OLTP索引壓縮等方面持續(xù)創(chuàng)新迭代,我們希望能夠有開創(chuàng)性的技術(shù)突破來解決相關(guān)的問題,為業(yè)務(wù)創(chuàng)造更大價值。


GaussDB技術(shù)解讀系列之高級壓縮的評論 (共 條)

分享到微博請遵守國家法律
兰考县| 康马县| 德江县| 琼结县| 阜宁县| 简阳市| 斗六市| 观塘区| 灵寿县| 墨玉县| 凯里市| 伊吾县| 金川县| 长顺县| 和静县| 浦县| 阳山县| 灵台县| 万源市| 新龙县| 西和县| 无棣县| 郸城县| 清苑县| 赤壁市| 凤凰县| 开封县| 湘潭县| 通许县| 江口县| 渭源县| 象山县| 磐安县| 泰来县| 岳普湖县| 衡阳市| 肥城市| 溧水县| 马公市| 江阴市| 呼图壁县|