暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据压缩

由迪 2024-06-24
56

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)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论