文档中心MogDBMogDB StackUqbar

文档:v2.0

支持的版本:

数据压缩

Uqbar时序数据库支持自动和手动压缩数据,以减少数据存储成本并提升查找效率。

自动压缩

后台按照设定的压缩延迟时间,自动对时序数据执行压缩,以节省存储空间。压缩的时间延迟可以通过 guc 参数 uqbar.timeseries_compression_delay 设置。

语法格式

自动压缩会根据设定的延迟自动触发,无需用户执行。

注意事项

  • 压缩以 chunkgroup 为粒度进行,即一个 chunkgroup 内的所有 chunk 一起执行压缩操作。
  • 达到设置的压缩间隔后,数据压缩还需要满足以下条件:
    • chunkgroup 的结束时间早于当前系统时间
    • chunkgroup 内超过 uqbar.timeseries_compression_delay 的间隔没有数据写入
    • 当前版本压缩成功后, chunkgroup 不支持再写入数据

示例

假设前置条件:chunkGroupDuration = 1 week,假设当前时间为2022-7-7 09:55:00

  1. 设置自动压缩延迟为 1 min,即 uqbar.timeseries_compression_delay = 60;

  2. 写入数据,保证分片内的所有数据都小于当前时间;

    INSERT INTO weather SELECT '2022-07-01 00:00:00'::timestamp, 'beijing', 'park', generate_series(1, 2000); 
  3. 查看chunk属性,找到建立的分片;

    SELECT * FROM timeseries_catalog.tschunk;
  4. 两分钟以后再次查看chunk属性,确认其是否已经被压缩。

手动压缩

支持用户手动触发压缩,用户可以通过执行压缩命令,对时序表或时序表内的某个chunkgroup进行压缩。

语法格式

COMPRESS TIMESERIES table_name [ PARTITION chunkgroupname ]

注意事项

  • 当前版本不支持对压缩后的chunkgroup再写入数据
  • 不指定 Partition 参数表示对时序表所有的 chunkgroup 执行压缩;指定 Partition 会对指定的 chunkgroup 执行压缩

示例

Uqbar=# COMPRESS TIMESERIES weather PARTITION chunkgroup_1;
COMPRESSED
Uqbar=# COMPRESS TIMESERIES weather;
COMPRESSED

压缩率视图

系统内置 timeseries_views.compression_table 和 timeseries_views.compression_chunkgroup 两个视图,可以按照表和chunkgroup维度展示压缩前后的数据量、压缩率等数据。关于这两个视图的详细信息,参考timeseries_views.compression_tabletimeseries_views.compression_chunkgroup

语法格式

SELECT * FROM timeseries_views.compression_table;
SELECT * FROM timeseries_views.compression_chunkgroup;

示例

--查看时序表weather的压缩率
Uqbar=# SELECT tablename, before_compression_size, after_compression_size, compression_ratio FROM timeseries_views.compression_table WHERE tablename = 'weather';
 tablename | before_compression_size | after_compression_size | compression_ratio 
------------------------+-------------------------+--------------------+------------
 weather   |  1746534                |  1483457               |  1.17

(1 rows)

--查看时序表weather的分片压缩率
Uqbar=# SELECT tablename, chunkgroupname, before_compression_size, after_compression_size, compression_ratio FROM timeseries_views.compression_chunkgroup WHERE tablename = 'weather';
 tablename | chunkgroupname | before_compression_size | after_compression_size | compression_ratio 
--------------------+--------------------+---------------- --------+---------------------+------------
 weather   |  p_1_1         | 387564                  |  328576                |  1.17
 weather   |  p_1_2         | 417829                  |  358273                |  1.16

(2 rows)
Copyright © 2011-2024 www.enmotech.com All rights reserved.