PostgreSQL简直是工业界和学术界的完美结合,怎么说呢?下面娓娓道来。 前段时间为大家分享了物联网行业分析以及PostgreSQL 为物联网场景量身定制的特性介绍。(可参看今日微信推送第二篇文章) 今天再给大家分享一枚重磅炸弹,PostgreSQL 帮助物联网用户降低98%的存储成本。这是个什么概念呢? 举个例子,你原来要花100万买存储才能存下的数据,现在只需要花2万就能搞定。 下面我会给大家介绍一下是如何做到的。 在物联网和金融行业中,存在庞大的数据体量,以一个城市的电子眼为例,一个月存储的车牌信息就可能几百亿,一年可能达到几千亿甚至上万亿。这仅仅是物联网中某一项单一应用的数据量。 这么大的数据量,存入数据库会有多大呢? 我来模拟一些数据: 5个字段,随机生成一些数据,其中一个字符串,3个INT,1个时间类型。 digoal=# create table heap_test(c1 int, c2 text, c3 int, c4 int, c5 timestamp);digoal=# insert into heap_test select random()*5000000, repeat(md5(c::text),32), c random()*50000000, random()*1000000, current_date (150000*random())::int from (select trunc(random()*100000) c from generate_series(1,50000000) t(id)) t; 并行执行10次,生成5亿数据。 传统的堆数据存储,5亿数据就达到500GB。 怎样能把500GB的数据压缩到5GB呢? 原理如下: 堆表行压缩 堆表块压缩 列存储原理 列存储块压缩 拿Greenplum来做一下验证,PostgreSQL的列存储可以外挂cstore, monetdb引擎。或者等阿里云AliCloudDB for PostgreSQL后期的版本开放这个功能。 使用列存储,开启压缩,可以将数据量压缩到 21GB。 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;ANALYZEdigoal=# 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 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|