【GP社区】Greenplum AO列存储设计解析

序言

本文是第二篇学习和研究Greenplum总结,并在社区中分享的文章。写本文的缘由,是来自于长时间对AO列存的困惑。为了能够进一步理解AO列存的内部原理,查询了相关文献以及对源码的阅读,同时做了实验验证。这里做了转载,把简书作为近期学习心得一个统一入口。感谢你的阅读,希望你能有所收获,并对文章提出建议。

原文链接:https://cn.greenplum.org/greenplum-ao-column-storage/

一、解析背景:

Greenplum AO列存,主要面向OLAP场景。表的列很多,分析其中少部分列,通过AO列存方式,大块的IO读,降低IO成本,提升分析速度。AO以前是appendonly,不支持update/delete,后来支持了,内部也改叫append optimized表。

二、AO列表存储设计

一张AO列存表主要涉及到表有pg_appendonly、pg_aoseg_<relid>、pg_aoblkdir_<relid>、pg_aovisimap_<relid>,这些表归属于pg_aoseg空间。

三、总结

1.AO列存优点分析速度快,对于OLAP场景,每次分析涉及的字段较少,采用GP的AO表的这个设计可以保证行级严格事务,这在列存数据库中不多见,这样的设计有利于高吞吐数据量的加载。同时通过块的方式提高数据的压缩比。

2.AO列存缺点每个列至少对应一个文件。例如集群有10个primary,10个mirror,一张有500列按天分区的列表,对应年的文件数>(10+10)*365*500=3650000。因而需要结合数据量和查询特征来设计合理的segment和分区的个数。 GP5、GP6存储空间占用大,如果表建索引,频繁的小批量加载数据会导致pg_aoblkdir_<relid>占用非常大的存储空间。GP7有brin索引可以考虑,索引文件会非常小,小到可以忽略不计。

本文介绍AO列存辅组表,以及相关设计进行解读,为更好的使用和理解AO列存表提供帮助,用户需要根据业务场景选择是否要采用AO列存。



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容