PipelineDB是一个用于在时序数据上持续执行SQL查询的高性能PostgreSQL插件。SQL查询的输出被持久化到普通的表中,可以像其它的表或视图一样进行查询。可以认为持续查询的结果是一个高吞吐量并且快速更新的物化视图。经过测试确实不错,但是奈何2019年5月1日PipelineDB团队加入Confluent不再提供开源免费版,免费版只支持到PG11。
最近在研究timesacledb时序数据库,发现里面的连续聚合很有意思,它开源、支持历史数据按规则进行保留、统计数据实时更新。
话不多说,直接看测试情况。
创建超表
postgres=# create table agg_tab(id int,name varchar,dtime timestamp default clock_timestamp(),primary key (id,dtime));
CREATE TABLE
postgres=#
按小时进行分区,每小时一个分区
postgres=# SELECT create_hypertable('agg_tab','dtime',chunk_time_interval => INTERVAL '1 hours');
NOTICE: adding not-null constraint to column "dtime"
DETAIL: Time dimensions cannot have NULL values.
create_hypertable
-----------------------
(3,public,test_avg,t)
(1 row)
postgres=#
创建连续聚合聚合,查询每小时人数统计
postgres=# CREATE MATERIALIZED VIEW view_agg_tab WITH (timescaledb.continuous) AS SELECT time_bucket('1 hour', dtime) as bucket,count(*) FROM agg_tab GROUP BY bucket;
NOTICE: refreshing continuous aggregate "view_agg_tab"
HINT: Use WITH NO DATA if you do not want to refresh the continuous aggregate on creation.
CREATE MATERIALIZED VIEW
postgres=#
写入测试数据库
postgres=# insert into agg_tab select id,md5(random()::text),dtime from generate_series(1,3000) id,generate_series(to_date('20220318','yyyymmdd'),to_date('20220319','yyyymmdd'),'5m') dtime;
INSERT 0 867000
postgres=#
查询视图
postgres=# select * from view_agg_tab ;
bucket | count
---------------------+-------
2022-03-19 00:00:00 | 3000
2022-03-18 08:00:00 | 36000
2022-03-18 15:00:00 | 36000
2022-03-18 03:00:00 | 36000
2022-03-18 22:00:00 | 36000
2022-03-18 13:00:00 | 36000
2022-03-18 11:00:00 | 36000
2022-03-18 19:00:00 | 36000
2022-03-18 17:00:00 | 36000
2022-03-18 04:00:00 | 36000
2022-03-18 01:00:00 | 36000
2022-03-18 00:00:00 | 36000
2022-03-18 02:00:00 | 36000
2022-03-18 09:00:00 | 36000
2022-03-18 07:00:00 | 36000
2022-03-18 06:00:00 | 36000
2022-03-18 05:00:00 | 36000
2022-03-18 20:00:00 | 36000
2022-03-18 16:00:00 | 36000
2022-03-18 21:00:00 | 36000
2022-03-18 12:00:00 | 36000
2022-03-18 18:00:00 | 36000
2022-03-18 14:00:00 | 36000
2022-03-18 10:00:00 | 36000
2022-03-18 23:00:00 | 36000
(25 rows)
postgres=#
再次写入数据
postgres=# insert into agg_tab select id,md5(random()::text),dtime from generate_series(3001,5000) id,generate_series(to_date('20220318','yyyymmdd'),to_date('20220319','yyyymmdd'),'5m') dtime;
INSERT 0 578000
postgres=#
再次查询视图,可以看到数据已经实时统计
postgres=# select * from view_agg_tab ;
bucket | count
---------------------+-------
2022-03-19 00:00:00 | 5000
2022-03-18 08:00:00 | 60000
2022-03-18 15:00:00 | 60000
2022-03-18 03:00:00 | 60000
2022-03-18 22:00:00 | 60000
2022-03-18 13:00:00 | 60000
2022-03-18 11:00:00 | 60000
2022-03-18 19:00:00 | 60000
2022-03-18 17:00:00 | 60000
2022-03-18 04:00:00 | 60000
2022-03-18 01:00:00 | 60000
2022-03-18 00:00:00 | 60000
2022-03-18 02:00:00 | 60000
2022-03-18 09:00:00 | 60000
2022-03-18 07:00:00 | 60000
2022-03-18 06:00:00 | 60000
2022-03-18 05:00:00 | 60000
2022-03-18 20:00:00 | 60000
2022-03-18 16:00:00 | 60000
2022-03-18 21:00:00 | 60000
2022-03-18 12:00:00 | 60000
2022-03-18 18:00:00 | 60000
2022-03-18 14:00:00 | 60000
2022-03-18 10:00:00 | 60000
2022-03-18 23:00:00 | 60000
(25 rows)
postgres=#
复制
连续聚合有点类似于 PostgreSQL 的 物化视图,但与物化视图不同的是,连续聚合可以连续和增量刷新。刷新可以手动完成,也可以通过在后台运行的策略完成,并且可以覆盖整个连续聚合或仅覆盖特定时间范围。在任何一种情况下,刷新只会重新计算自上次刷新以来已更改的聚合存储桶。
默认情况下,对连续聚合的查询使用实时聚合(在 TimescaleDB 1.7 中首次引入)将物化聚合与源超表中的最新数据相结合。通过以这种方式结合原始数据和物化数据,实时聚合可产生准确和最新的结果,同时仍受益于大部分结果的预先计算的聚合。
实时聚合是任何新的连续聚合的默认行为。要禁用实时聚合并仅显示物化数据,请 timescaledb.materialized_only=true在创建连续聚合视图时添加该参数,或使用 将其设置在现有连续聚合上 ALTER MATERIALIZED VIEW。
文章转载自PostgreSQL数据库工作学习随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
450次阅读
2025-04-14 09:40:20
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
382次阅读
2025-04-07 09:44:54
优炫数据库成功入围新疆维吾尔自治区行政事业单位数据库2025年框架协议采购!
优炫软件
328次阅读
2025-04-18 10:01:22
国产数据库时代,一些20年前的数据库设计小技巧又可以拿出来用了
白鳝的洞穴
238次阅读
2025-04-10 11:52:51
关于征集数据库标准体系更新意见和数据库标准化需求的通知
数据库标准工作组
222次阅读
2025-04-11 11:30:08
史诗级革新 | Apache Flink 2.0 正式发布
严少安
209次阅读
2025-03-25 00:55:05
TDengine 3.3.6.0 发布:TDgpt + 虚拟表 + JDBC 加速 8 大升级亮点
TDengine
179次阅读
2025-04-09 11:01:22
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
SelectDB
173次阅读
2025-04-03 17:41:08
GoldenDB助力江苏省住房公积金国产数据库应用推广暨数字化发展交流会成功举办
GoldenDB分布式数据库
163次阅读
2025-04-07 09:44:49
全国首部图数据库国家标准发布!达梦数据深度参与!
达梦数据
155次阅读
2025-04-02 09:34:13