是否有一种使用 timescaledb 的技术来删除行以减少旧时间刻度数据的频率?



我在超级表中存储了许多行。即使在当前的测试配置中,表大小现在也变得相当大。

我想通过删除一些这些较旧的记录,将数据的频率从每 5 秒一次减少到每 60 秒一次,用于一周以上的数据。

任何人都可以推荐一种方法,或者更适合 timescaledb 设计的更好方法吗?

因此,下一个版本将围绕连续聚合的数据保留策略提供一些功能,以便您可以定义一个连续聚合策略,该策略将次要数据汇总为分钟数据,然后删除早于某个时间段的第二个数据。

(这种能力目前在连续 aggs 中不存在,但很快就会存在。 现在最好的方法是使用一些删除旧数据的 cron 作业,或者在聚合时从一个表复制到第二个表,然后在第一个表上调用drop_chunks。

好的,我已经阅读了 2 分钟的 timescaledb 文档,所以我是专家,对吧。这是我的建议:

  1. 您已经有一个表(我称之为业务表(和一个包含原始 5 秒数据的超表
  2. 创建与第一个超级表具有相同列的第二个超级表
  3. 使用 60 秒窗口函数和读数数据的平均值、最小值或最大值插入到第二个超表中(您必须决定哪个聚合函数对您的情况有意义。 此插入 SQL 如下所示:
INSERT into minute_table (timestamp, my_reading) 
(SELECT time_bucket('60 seconds', time) as the_minute, avg(my_raw_reading)
FROM five_second_table
WHERE time < (now() - interval '1week')
GROUP BY the_minute
);
  1. 接下来,从 5 秒超表中删除其中的时间戳在 60 秒超表的任何时间范围内。

  2. 最后,安排这样的事情每周运行一次。

抱歉,我不精通所有 timescaledb 函数,但这应该可以让您开始手动聚合从 5 秒到 60 秒样本的"繁重工作"。

查看数据保留

例如:

SELECT drop_chunks(interval '24 hours', 'conditions');

这将从仅包含早于此持续时间的数据的超表"条件"中删除所有块,并且不会删除块中的任何单个数据行。

最新更新