ids 11
資料壓縮和儲存優化
* 從
11.50.xc4
版本開始
ids具有該特性
概述
ids通過對錶及分片表進行資料壓縮來減少磁碟儲存空間,在進行壓縮操作前,可以對壓縮率進行提前估算,從而做到有針對性的有效壓縮。同時支援對錶的資料空間進行歸併整理,可以實現對通過資料壓縮和歸併整理優化出來的空間進行釋放到dbspace,從而實現最大限度的儲存優化能力。
為什麼要進行資料壓縮?
日益資訊化的世界裡,充滿著各種各樣的資料,人們通過大量的儲存裝置來儲存自己需要的各種資料資訊,在實現世界中,資訊的增長速度越來越快,儲存裝置開銷佔資訊化管理成本比重越來越大,同時儲存裝置需要大量的電力來冷卻儲存裝置及裝置的執行。在如今激烈競爭的商業時代,如何為企業降低執行成本;在如今能源緊缺的今天,節約用電已是我們每個人都需要努力的目標。資料庫儲存了大部分企業的資料,因此對資料庫的資料進行壓縮,無疑能為企業節省一筆不菲的開支。有相關調查統計資料表明,乙個10t的資料庫一年執行成本為200萬人民幣。如果採用資料庫壓縮技術,把資料壓縮40%,這樣我們就能從中節省80萬人民幣。
ids資料壓縮技術
a.ids資料庫在資料壓縮後的好處
-極大地節省了磁碟儲存空間
-極大地減少了邏輯日誌的使用,有效地防止高負載oltp系統邏輯日誌瓶頸問題
-更少的page讀,因為更多的資料行可以儲存在同乙個page上
-更少的buffer pool
-更少的i/o
-對時間較的資料進行壓縮,對近期頻繁訪問的資料不進行壓縮
-釋放出壓縮後不在使用的空間
-更少的備份空間,更短的資料庫備份與恢復時間
b.行(row)壓縮演算法概念
壓縮演算法在整個資料表(table)中尋找重複的模式(pattern),當模式被找到時,字串被乙個12位元(bit)的符號替代.符號被儲存於乙個資料字典中以供快速查詢,在資料頁(page)中資料是被壓縮的 (不管是在硬碟上還是在緩衝池裡)
顯著的節省了輸入輸出的頻寬– 更好的效能
顯著地節省了記憶體空間– 更有效的記憶體使用
一些**處理器(cpu)的額外開銷
行(row)資料被處理前必須先被解壓縮
可被壓縮的**被壓縮後通常能節省60%到80%的空間
整個資料庫的儲存空間將被節省40%到50%
這意味著只要50%的磁碟空間就能夠支援ids11資料庫!
c.壓縮操作
ids壓縮操作,對錶、或者對分片表的某乙個分片進行壓縮操作。
壓縮過程包括幾個步驟,每個步驟詳細說明如下:
* 每個操作在sysadmin資料庫中執行,對於分片表,我們可以對整個表或者表的某乙個分片進行壓縮操作
(1).壓縮率評估
ids採用row壓縮技術,通過替代位來代表重複的模式(pattern),和我們正常的檔案壓縮技術類似,如果資料重複率低,則壓縮率較低,這種情況下,我們對錶進行壓縮會帶來負面的影響。所以我們要對壓縮率較高的表進行壓縮。
對整個表
execute function task("table estimate_compression","table_name", "database_name", "owner_name");
對分片表的某乙個分片
execute function task("fragment estimate_compression","partnum_list");
(2). 建立壓縮字典
由於ids壓縮技術通過搜尋重複模式(pattern)來實現壓縮,所以在壓縮前需要建立壓縮字典表,該錶存放表中已有重複的模式,所以要求表中至少有2k記錄才可以進行壓縮操作。對於記錄數較大的表,通過sample抽取重複模式。當建立完成壓縮字典後,後來insert的記錄將採用此模式進行壓縮,我們可以重新建立字典,然後再進行新的壓縮。所以一般情況下,我們建議對新增記錄較少情況下的表或者分片進行壓縮比較合理。
對整個表
execute function task("table create_dictionary", "table_name","database_name", "owner_name");
對分片表的某乙個分片
execute function task("fragment create_dictionary", "partnum_list");
(3). 壓縮資料
如果沒有進行上一步建立壓縮字典,該操作在做前將自動觸發建立壓縮字典操作
對整個表
execute function task("table compress", "table_name","database_name", "owner_name");
對分片表的某乙個分片
execute function task("fragment compress", "partnum_list");
(4). 整理儲存空間
對於壓縮後釋放的空間進行空間整理,對於非壓縮表也可以進行該操作,可以簡單的理解為我磁碟碎片整理操作
對整個表
execute function task("table repack", "table_name","database_name", "owner_name");
對分片表的某乙個分片
execute function task("fragment repack_offline", "partnum_list");
(5). 釋放儲存空間
對於表占用但尚未存放資料的空間,通過上一步後,可以把該空間釋放出來到dbspace
對整個表
execute function admin("table shrink", "table_name","database_name", "owner_name");
對分片表的某乙個分片
execute function task("fragment shrink", "partnum_list");
(6). 解壓
如果我們需要把已經壓縮的表不在壓縮,我們就需要進行解壓操作。解壓操作可以進行online和offline操作,當採用online模式,將不影響表的正常訪問,但採用offline模式解壓速度較快
對整個表
execute function task("table uncompress", "table_name","database_name", "owner_name");
或者offline
execute function admin("table uncompress_offline","table_name", "database_name", "owner_name");
對分片表的某乙個分片
execute function task("fragment uncompress", "partnum_list");
或者offline
execute function task("fragment uncompress_offline", "partnum_list");
d.壓縮操作舉例
ids除了提供如上所示的api方式,同時提供了oat視覺化操作介面,操作起來更加便捷。詳細情況請查閱oat相關說明問題。
正常情況下,我們對乙個表進行壓縮操作,不需要嚴格按照上面所描述的壓縮操作的順序來進行,其中建立壓縮字典表包含在壓縮操作中,在進行壓縮操作時,資料庫發現沒有對應的壓縮字典表,立即進行建立壓縮字典,然後進行資料壓縮操作。乙個一般的壓縮操作流程如下:
(1). 壓縮評估
execute function task("table estimate_compression","table_name", "database_name", "owner_name");
(2). 壓縮
execute function task("table compress", "table_name","database_name", "owner_name");
(3). 空間整理與釋放
execute function task("table repack", "table_name","database_name", "owner_name");
若要釋放空間情況
informix dynamic server 資料壓縮和儲存優化
hive的資料壓縮格式和儲存格式
1.textfile hive資料表的預設格式 可以使用gzip壓縮演算法,但壓縮後的檔案不支援split 2.sequencefile sequence file是可分割的檔案格式,支援hadoop的block級壓縮。3.rcfile 資料按行分塊,每塊按列儲存 4.orcfile 資料按行分塊,...
資料壓縮實驗 DPCM壓縮系統的實現和分析
1.dpcm編譯碼原理 dpcm是差分 編碼調製的縮寫,是比較典型的 編碼系統。在dpcm系統中,需要注意的是 器的輸入是已經解碼以後的樣本。之所以不用原始樣本來做 是因為在解碼端無法得到原始樣本,只能得到存在誤差的樣本。因此,在dpcm編碼器中實際內嵌了乙個解碼器,如編碼器中虛線框中所示。在乙個d...
Android和WCF通訊 大資料壓縮後傳輸
android和wcf通訊 大資料壓縮後傳輸 最近一直在優化專案的效能,就在前幾天找到了一些資料,終於有方案了,那就是壓縮資料。一丶前端和後端的壓縮和解壓縮流程 二丶優點和缺點 優點 字串的壓縮率能夠達到70 80 左右 字串數量更少了 缺點 cpu的開銷會大一點,不過在可承受範圍之內 三丶通過標記...