

digoal=# create table ao1_test(c1 int, c2 text, c3 int, c4 int, c5 timestamp) with (APPENDONLY=true,BLOCKSIZE=2097152,ORIENTATION=column,COMPRESSTYPE=zlib,CHECKSUM=false);
digoal=# insert into ao1_test select * from heap_test ;
digoal=# analyze ao1_test;
ANALYZE
digoal=# select pg_size_pretty(pg_total_relation_size('ao1_test'));
pg_size_pretty
----------------
21GB
(1 row)
压缩比达到了 这就完了吗?
显然还没,压缩比和数据存储关系是非常大的,为了进一步提升列存储的压缩比,我们必须找到一个非常合理的数据排序才能实现这一的目的。
为了达到这个目的,我们需要关注几个要素:
.1. 字段值的重复率,重复率越高的值,排序后的压缩比越高。
.2. 字段值的平均宽度,平均宽度大的值,压缩取得的绝对效果比宽度小的值好。
.3. 字段与字段间的线性相关性,线性关系好的字段,按其中一个A字段排序后线性关系也好,从而相关字段B的压缩效果也会比较好,从而达到双赢的目的。
以上三个要素都提到了统计学的知识, PostgreSQL数据库在这方面是非常强大的。
接下来会展示PostgreSQL利用窗口计算和统计分析,推算出最佳压缩比的字段排序组合。
第一个要素,字段值重复率的计算方法:
case
when n_distinct < 0 then 1 + n_distinct
when n_distinct = 1 then 1
when n_distinct > 1 then 1 - n_distinct/reltuples
end
传真:0755 - 2799 6625
投诉:133-2299-1235
邮箱:sale@inmiga.com