postgresql timescaladb时序数据库使用入门

postgresql timescaladb时序数据库使用入门

git地址官方文档官方文档-cn

本文基于timescaladb 2.17.2版本,在低版本,相关函数和功能可能有差别。

timescaladb优点

  • 建立在PostgreSQL之上,融入pg生态,可以使用pg的全部特性。
  • 压缩。针对海量时序数据,高压缩率节省空间。不需要特殊的存储格式,列存压缩,并提供查询加速。
  • 持续聚合。在按时间颗粒度统计场景,时序数据通常增长很快,传统方案定时统计时扫描全表会很慢。提供了自动累加方案替代,持续跟踪数据集,视图方式呈现。
  • 丰富的时间窗口函数。

timescaladb超表使用示例

sql 复制代码
-- 使用timescaledb扩展
CREATE EXTENSION IF NOT EXISTS timescaledb;

-- 先创建普通表
CREATE TABLE iot_device_log (
    log_id BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY,
    identity VARCHAR(64) NOT NULL,
    create_time TIMESTAMP NOT NULL
);

-- 创建主键,必须带时间,且时间字段定义必须非空。时序表一般以时间为主键就足够了,若业务上定义有非时间主键,则使用复合主键关联时间序列
ALTER TABLE iot_device_log ADD PRIMARY KEY(log_id, create_time);

-- 将普通表转换为超表,并设置区块划分策略。这里设置每6个小时分一个块
-- 原始表的实际数据,存储在_timescaledb_internal模式的表下,并按分块命名xxx_chunk。涉及数据同步时要注意
SELECT create_hypertable('iot_device_log', by_range('create_time', INTERVAL '6 hours'));

-- 创建数据压缩分段列。建议按业务特性选择分段的列,如该列可能被常用在group by
ALTER TABLE iot_device_log SET (
  timescaledb.compress,
  timescaledb.compress_segmentby = 'identity',
	timescaledb.compress_orderby='create_time DESC'
);

-- 创建数据压缩策略。这里设置每6小时执行一次压缩
SELECT add_compression_policy('iot_device_log', INTERVAL '6 hours');

-- 创建数据保留策略。保留xx内的数据,超过xx的数据块会被删除。这里设置保留1年内的数据
SELECT add_retention_policy('iot_device_log', INTERVAL '1 year');

timescaladb常用运维

sql 复制代码
-- 查看各块和压缩情况
SELECT * FROM timescaledb_information.chunks;

-- 查看压缩效果
SELECT 
    pg_size_pretty(pg_database_size('db_name')) as db_size,
    pg_size_pretty(before_compression_total_bytes) as before,
    pg_size_pretty(after_compression_total_bytes) as after,
	now()
 FROM hypertable_compression_stats('your_hypertable_name');
 
 -- 查看数据库当前连接情况
 SELECT * FROM  pg_stat_activity where datname = 'db_name';

 -- 调整超表已经存在的区块策略
SELECT set_chunk_time_interval('iot_device_log', INTERVAL '6 hours');

-- 删除指定超表的数据保留策略
SELECT remove_retention_policy('iot_device_log');
 
-- 重启压缩。压缩任务停止时尝试使用
-- SELECT _timescaledb_functions.start_background_workers();
相关推荐
heartbeat..16 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
麦聪聊数据18 小时前
MySQL并发与锁:从“防止超卖”到排查“死锁”
数据库·sql·mysql
AC赳赳老秦19 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
YMatrix 官方技术社区20 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录20 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong21 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
欧亚学术21 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
黑白极客1 天前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎
大厂技术总监下海1 天前
数据湖加速、实时数仓、统一查询层:Apache Doris 如何成为现代数据架构的“高性能中枢”?
大数据·数据库·算法·apache
LeenixP1 天前
RK3576-Debian12删除userdata分区
linux·运维·服务器·数据库·debian·开发板