JSONB壓縮版本ZSON
標籤
PostgreSQL , json , jsonb , zson
背景
json, jsonb是PostgreSQL裡面的一種schemaless資料型別,zson是相容json,jsonb的一種壓縮型別,通過訓練的方式生成字典,通過字典進行壓縮。
通常獲得的壓縮比比較客觀,壓縮後可以節約儲存空間,節約SHARED BUFFER,提高TPS。
安裝
git clone https://github.com/postgrespro/zson
cd zson
export PATH=/home/digoal/pgsql/bin:$PATH
make
make install
make installcheck
connect to database, create extension
psql db
create extension zson;
用法
1 通過訓練,構造字典
訓練函式介面如下
zson_learn(
tables_and_columns text[][],
max_examples int default 10000,
min_length int default 2,
max_length int default 128,
min_count int default 2
)
需要提供被訓練的表,以及JSON欄位名
select zson_learn(`{{"table1", "col1"}, {"table2", "col2"}}`);
建議使用真實資料進行訓練,確保訓練得到的字典對實際資料有效。
檢視訓練好的字典
select * from zson_dict;
2 使用zson型別
字典訓練完成後,寫入資料,zson將以字典形式壓縮儲存。
zson_test=# create table zson_example(x zson);
CREATE TABLE
zson_test=# insert into zson_example values (`{"aaa": 123}`);
INSERT 0 1
zson_test=# select x -> `aaa` from zson_example;
-[ RECORD 1 ]-
?column? | 123
字典版本
每次呼叫zson_learn都會生成新的字典,所有字典都會快取到記憶體中。
新寫入的zson資料會使用最新版本的字典進行壓縮,不影響老的ZSON資料。
使用zson_info可以檢視zson值使用的字典版本。
zson_test=# select zson_info(x) from test_compress where id = 1;
-[ RECORD 1 ]---------------------------------------------------
zson_info | zson version = 0, dict version = 1, ...
zson_test=# select zson_info(x) from test_compress where id = 2;
-[ RECORD 1 ]---------------------------------------------------
zson_info | zson version = 0, dict version = 0, ...
刪除字典
當所有的ZSON都沒有使用舊的字典時,才能刪除舊字典,否則請不要刪除。
delete from zson_dict where dict_id = 0;
評估是否需要重新訓練字典
當發現壓縮比升高時,可能需要重新訓練字典。
或者根據json資料寫入的持續,資料內容的變化等,進行排程。
當資料內容變化很大時,可能需要重新生成字典。
select pg_table_size(`tt`) / (select count(*) from tt)
生成新的字典後,通過zson_dict,對比不同版本的字典內容,也能知道新字典是否有必要。(請務必使用真實資料生成字典)
參考
https://github.com/postgrespro/zson
相關文章
- gulp-imagemin版本9圖片壓縮
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- 檔案壓縮和解壓縮
- Python實現壓縮和解壓縮Python
- JS壓縮方法及批量壓縮JS
- linux下壓縮解壓縮命令Linux
- linux壓縮和解壓縮命令整理Linux
- Linux tar分卷壓縮與解壓縮Linux
- CentOS 壓縮解壓CentOS
- Linux壓縮解壓Linux
- linux 高效壓縮工具之xz的壓縮解壓使用Linux
- Linux中檔案的壓縮和解壓縮Linux
- Gzipped 壓縮
- 打包/壓縮
- linux分卷壓縮解壓Linux
- linuxtar解壓和壓縮Linux
- 壓縮包格式有哪些?壓縮包格式大全
- ppt怎麼壓縮,ppt壓縮的技巧分享
- 壓縮Word,一鍵實現Word文件壓縮
- 分卷壓縮怎麼解壓 快速解壓電腦分卷壓縮檔案方法
- Linux 常用的壓縮與解壓縮命令詳解Linux
- Linux下的tar壓縮解壓縮命令詳解Linux
- .NET 壓縮/解壓檔案
- Keka for Mac壓縮解壓工具Mac
- Keka for Mac(壓縮解壓工具)Mac
- Linux打包壓縮解壓工具Linux
- MyZip for mac解壓壓縮工具Mac
- 【Linux基礎】壓縮和解壓Linux
- zip壓縮檔案處理方案(Zip4j壓縮和解壓)
- 狀態壓縮
- JavaScript 影像壓縮JavaScript
- Linux之壓縮Linux
- phpstorm 壓縮 JSPHPORMJS
- 引數壓縮
- 壓縮錶轉非壓縮表(線上重定義)
- pdf怎麼壓縮,好用的pdf壓縮工具介紹
- 如何把影片壓縮,影片壓縮軟體哪個最好
- CentOS中zip壓縮和unzip解壓縮命令詳解CentOS
- png格式如何壓縮,圖片壓縮工具哪個好