数据压缩
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 min,即 uqbar.timeseries_compression_delay = 60;
-
写入数据,保证分片内的所有数据都小于当前时间;
INSERT INTO weather SELECT '2022-07-01 00:00:00'::timestamp, 'beijing', 'park', generate_series(1, 2000);
-
查看chunk属性,找到建立的分片;
SELECT * FROM timeseries_catalog.tschunk;
-
两分钟以后再次查看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_table、timeseries_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)