JSONB 压缩版本 ZSON

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介:

标签

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

目录
相关文章
|
Shell Linux 计算机视觉
【Dlib】动作检测:以常见的人脸识别验证为例讲解张嘴与闭眼
【Dlib】动作检测:以常见的人脸识别验证为例讲解张嘴与闭眼
842 0
|
芯片 开发者 SoC
E906的中断系统|学习笔记
快速学习 E906的中断系统
788 0
E906的中断系统|学习笔记
|
4月前
|
存储 SQL 分布式计算
MaxCompute 聚簇优化推荐原理
基于历史查询智能推荐Clustered表,显著降低计算成本,提升数仓性能。
320 4
MaxCompute 聚簇优化推荐原理
|
SQL 分布式计算 大数据
MaxCompute 聚簇优化推荐简介
在大数据计算中,Shuffle 是资源消耗最大的环节之一。MaxCompute 提供聚簇优化推荐功能,通过调整 Cluster 表结构,有效减少 Shuffle 量,显著提升作业性能并节省计算资源。实际案例显示,该功能可帮助用户每日节省数 PB 的 Shuffle 数据量及数千 CU 的计算成本。
250 0
|
8月前
|
SQL 分布式计算 DataWorks
使用DataWorks PyODPS节点调用XGBoost算法
本文介绍如何在DataWorks中通过PyODPS3节点调用XGBoost算法完成模型训练与测试,并实现周期离线调度。主要内容包括:1) 使用ODPS SQL构建数据集;2) 创建PyODPS3节点进行数据处理与模型训练;3) 构建支持XGBoost的自定义镜像;4) 测试运行并选择对应镜像。适用于需要集成机器学习算法到大数据工作流的用户。
369 24
|
8月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】在PostgreSQL中访问Oracle
本文介绍了如何在PostgreSQL中使用oracle_fdw扩展访问Oracle数据库数据。首先需从Oracle官网下载三个Instance Client安装包并解压,设置Oracle环境变量。接着从GitHub下载oracle_fdw扩展,配置pg_config环境变量后编译安装。之后启动PostgreSQL服务器,在数据库中创建oracle_fdw扩展及外部数据库服务,建立用户映射。最后通过创建外部表实现对Oracle数据的访问。文末附有具体操作步骤与示例代码。
411 6
【赵渝强老师】在PostgreSQL中访问Oracle
|
11月前
|
虚拟化 iOS开发 MacOS
VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
474 7
VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
|
10月前
|
存储 分布式计算 DataWorks
阿里云助力富友数据中台革新,创新引擎赋能商户数字化经营
在电子商务和跨境交易蓬勃发展的背景下,第三方支付行业迎来爆发式增长,但也面临数据量激增、实时性瓶颈、高并发压力及成本效率失衡等挑战。富友支付通过引入MaxCompute、Hologres和DataWorks等技术,重构新一代数据仓库体系,实现高性能、高稳定性和降本增效,助力商户数字化经营,推动支付行业生态的可持续发展。
|
关系型数据库 MySQL 数据库
postgresql使用mysql_fdw连接mysql
通过以上步骤,你可以在PostgreSQL中访问和查询远程MySQL服务器的数据,这对于数据集成和多数据库管理非常有用。
923 0