阿里云HybridDB for PG实践 - 行存、列存,堆表、AO表的原理和选择
标签
PostgreSQL , Greenplum , 向量计算 , 行存储 , 列存 , AO表
背景
Greenplum支持行存和列存,支持堆表和AO表,那么他们有什么不同,如何选择呢?
行存和列存的原理
1、行存,以行为形式组织存储,一行是一个tuple,存在一起。当需要读取某列时,需要将这列前面的所有列都进行deform,所以访问第一列和访问最后一列的成本实际上是不一样的。
在这篇文档中,有deform的详细介绍。《PostgreSQL 向量化执行插件(瓦片式实现) 10x提速OLAP》
行存小结:
全表扫描要扫描更多的数据块。
压缩比较低。
读取任意列的成本不一样,越靠后的列,成本越高。
不适合向量计算、JIT架构。(简单来说,就是不适合批处理形式的计算)
需要REWRITE表时,需要对全表进行REWRITE,例如加字段有默认值。
2、列存,以列