Skip to main content

可配置存储压缩

从 TDengine 3.3.0.0 版本开始,TDengine 提供了更高级的压缩功能,用户可以在建表时针对每一列配置是否进行压缩、以及使用的压缩算法和压缩级别。

压缩术语定义

压缩等级

  • 一级压缩:对数据进行编码,本质也是一种压缩
  • 二级压缩:在编码的基础上对数据块进行压缩

压缩级别

在本文中特指二级压缩算法内部的级别,比如zstd,至少8个level可选,每个level 下都有不同表现,本质是压缩率、压缩速度、解压速度之间的 tradeoff,为了避免选择困难,特简化定义为如下三种级别:

  • high:压缩率最高,压缩速度和解压速度相对最差。
  • low:压缩速度和解压速度最好,压缩率相对最低。
  • medium:兼顾压缩率、压缩速度和解压速度。

压缩算法列表

  • 编码算法列表(一级压缩):simple8b, bit-packing,delta-i, delta-d, disabled

  • 压缩算法列表(二级压缩): lz4、zlib、zstd、tsz、xz、disabled

  • 各个数据类型的默认压缩算法列表和适用范围

数据类型可选编码算法编码算法默认值可选压缩算法可选压缩算法压缩等级默认值
tinyint/untinyint/smallint/usmallint/int/uintsimple8bsimple8blz4/zlib/zstd/xzlz4medium
bigint/ubigint/timestampsimple8b/delta-idelta-ilz4/zlib/zstd/xzlz4medium
float/doubledelta-ddelta-dlz4/zlib/zstd/xz/tsztszmedium
binary/nchardisableddisabledlz4/zlib/zstd/xzlz4medium
boolbit-packingbit-packinglz4/zlib/zstd/xzlz4medium

注意: 针对浮点类型,如果配置为tsz, 其精度由taosd的全局配置决定,如果配置为tsz, 但是没有配置有损压缩标志, 则使用lz4进行压缩

SQL 语法

建表时指定压缩

CREATE [dbname.]tabname (colName colType [ENCODE 'encode_type'] [COMPRESS 'compress_type' [LEVEL 'level'], [, other cerate_definition]...])

参数说明

  • tabname:超级表或者普通表名称
  • encode_type: 一级压缩,具体参数见上面列表
  • compress_type: 二级压缩,具体参数见上面列表
  • level: 特指二级压缩的级别,默认值为medium, 支持简写为 'h'/'l'/'m'

功能说明

  • 创建表的时候指定列的压缩方式

更改列的压缩方式

ALTER TABLE [db_name.]tabName MODIFY COLUMN colName [ENCODE 'ecode_type'] [COMPRESS 'compress_type'] [LEVEL "high"]

参数说明

  • tabName: 表名,可以为超级表、普通表
  • colName: 待更改压缩算法的列, 只能为普通列

功能说明

  • 更改列的压缩方式

查看列的压缩方式

DESCRIBE [dbname.]tabName

功能说明

  • 显示列的基本信息,包括类型、压缩方式

兼容性

  • 完全兼容已经存在的数据
  • 从更低版本升级到 3.3.0.0 后不能回退