返回首页
搜 索
400-77-456-22
英米加集团
领先RFID产品与物联网解决方案专家
INMIGA group
智慧城市
智能交通
一个简单算法可以帮助物联网,金融 用户 节约9
来源:英米加集团 | 作者:inmiga | 发布时间: 3614天前 | 2334 次浏览 | 🔊 点击朗读正文 ❚❚ | 分享到:

  第二个要素,字段值平均宽度的算法:

  avg(pg_column_size(column_name)

  第三个要素,字段值之间线性相关性的计算方法:

  同时需要计算 N*(N-1)/2 种相邻字段的相关性,相关性决定了压缩率的好坏,任意数据类型的相关性计算可以参考我前面写的文章:

  https://yq.aliyun.com/articles/18038

  最后是计算综合压缩率,需要计算每种组合的综合压缩率:

  对于有N列的表来说,会产生N阶乘种排序组合,也就是需要计算 N! 组数据的相关性。

  如何得到N种组合的顺序,可以参考我前面写的一篇文章:

  https://yq.aliyun.com/articles/17228

  代码如下:依赖函数,过滤重复字段,用于生成N阶排列组合:

  CREATE or replace FUNCTION has_dupli_val(VARIADIC arr int[]) RETURNS boolean AS $$

  select count(distinct val) <> count(*) dist_val from unnest($1) t(val) where val is not null;

  $$ language sql strict;

  计算每种排列组合的压缩率:

  这里需要用到矩阵,窗口查询,相关性计算等统计学的知识。

  用PostgreSQL可以把书本上的知识运用起来,还不错的,工业界和学术界的完美结合。

  下面还是拿Greenplum来做一下验证,PostgreSQL的列存储可以外挂cstore, monetdb引擎。或者等阿里云AliCloudDB for PostgreSQL后期的版本开放这个功能。

  create or replace function best_compress_cols(samp int8) returns void as $$

  declare

  cols text[] := array['c1', 'c2', 'c3', 'c4', 'c5']; -- 参与计算的字段(最多5列, 至少有一列的重复率>10%)

电力能源
农林牧渔
航空航天
精益制造
快消零售
智能港口
司法监狱
仓储物流
安监消防
金融通信