数据表的存储特性

堆存储和只追加存储

存储模式分为堆存储(Heap Storage)和只追加存储(Append-Optimized Storage)

堆存储

堆存储指的是默认情况下greenplum数据库使用与postgresql相同的存储模式。堆存储模式在OLTP类型工作负载的数据库中很常用,一般用于数据在初始装载后经常变化的场景.更新和删除操作需要对ROW级别做版本控制,以确保数据库事务处理的可靠性。堆存储更适合一些小表。
需要经常进行更新、删除、单行插入操作或者并行更新、删除、和插入操作的表,都适合堆存储
行存堆表是默认的存储模式;在执行CREATE TABLE命令时,使用WITH子句来指明表的存储模式,如果没有指明,默认行存堆表。

#创建test表并指定分布键为id列
CREATE TABLE test (id int, name text) DISTRIBUTED BY (id);

只追加存储

只追加存储适合数据仓库中非规范化的事实表,这些表通常都是系统中最大的表。只追加存储模式实现了更精简和优化的页面化存储结构。该存储模式强化了批量数据装载的性能,不推荐一行一行地使用插入语句来装载数据

#创建只追加表
CREATE TABLE test (id int,name text) WITH (appendonly=true);

行存储和列存储

堆存储和只追加存储是规定数据的物理存储方式,而行存储(ROW-based Storage)和列存储(Column-based Storage)则限定了数据的逻辑存储方式。使用列存储的表必须是只追加存储表

行存储

选择行存储的情况 (TP)

  1. 表数据的更新。如果表在装载完之后一定有更新操作,那么选择行存储。
  2. 经常进行插入操作。如果经常插入数据可以选择行存储。列存储对于写操作不是最优的,因为每条数据都需要被写到磁盘的多个位置(列存表的每列数据存储与不同的磁盘文件中,而行存表是将所有数据存储在同一个磁盘文件中)
  3. 查询列的数量。如果在SELECT或者WHERE 子句中涉及表的全部或多数列,则考虑行存储。

列存储 (AP)

  1. 列存储堆读操作进行优化,对写操作没有优化,同一行不同列的数据被放在磁盘的不同位置。
  2. 列存储模式的表在只访问部分列的分析查询查询操作中会表现出很好的性能
  3. 列存表的每列都在存储相同格式的数据值,压缩效率高,占用磁盘空间少,减少磁盘I/O
  4. 列存储的表更新修改操作会消耗大量资源,一般不会更新
posted @ 2022-07-07 17:01  du-z  阅读(251)  评论(0编辑  收藏  举报