当前位置: 首页 > news >正文

时序数据库TimescaleDB基本操作示例

在这里插入图片描述

好的!以下是使用 TimescaleDB 的 Java 示例(基于 JDBC,因为 TimescaleDB 是 PostgreSQL 的扩展,官方未提供独立的 Java SDK):


1. 添加依赖(Maven)

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.3.1</version>
</dependency>

在这里插入图片描述

2. 连接 TimescaleDB

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TimescaleDBExample {
    public static void main(String[] args) {
        String url = "jdbc:postgresql://localhost:5432/mydb"; // 数据库地址
        String user = "postgres";
        String password = "password";

        try (Connection connection = DriverManager.getConnection(url, user, password)) {
            System.out.println("成功连接到 TimescaleDB!");
            
            // 执行后续操作(如创建表、插入数据、查询等)
            
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

3. 创建时序表(Hypertable)

步骤

  1. 创建基础表:
CREATE TABLE cpu_usage (
    time TIMESTAMPTZ NOT NULL,
    host TEXT NOT NULL,
    load DOUBLE PRECISION
);
  1. 转换为超表:
SELECT create_hypertable('cpu_usage', 'time');

Java 执行 SQL

String sql = "SELECT create_hypertable('cpu_usage', 'time');");
try (Statement stmt = connection.createStatement()) {
    stmt.execute(sql);
    System.out.println("时序表创建成功!");
}

4. 插入数据

String insertSql = "INSERT INTO cpu_usage (time, host, load) VALUES ('2025-03-08 23:30:00+08:00', 'server01', 0.85)";
try (PreparedStatement pstmt = connection.prepareStatement(insertSql)) {
    pstmt.executeUpdate();
    System.out.println("数据插入成功!");
}

5. 查询数据

查询最近 5 分钟的数据

SELECT * FROM cpu_usage 
WHERE time >= NOW() - INTERVAL '5 minutes';

Java 执行查询

String query = "SELECT * FROM cpu_usage WHERE time >= NOW() - INTERVAL '5 minutes';";
try (Statement stmt = connection.createStatement();
     ResultSet rs = stmt.executeQuery(query)) {
    
    while (rs.next()) {
        System.out.println("Time: " + rs.getTimestamp("time"));
        System.out.println("Host: " + rs.getString("host"));
        System.out.println("Load: " + rs.getDouble("load"));
    }
}

6. 创建保留策略(Retention Policy)

TimescaleDB 的保留策略通过 SQL 实现:

ALTER TABLE cpu_usage 
SET (timescaledb(retention_period = '30 days'));

Java 执行

String retentionSql = "ALTER TABLE cpu_usage SET (timescaledb(retention_period = '30 days'));";
try (Statement stmt = connection.createStatement()) {
    stmt.execute(retentionSql);
    System.out.println("保留策略创建成功!");
}

注意事项

  1. 时间格式:插入时间时需使用 TIMESTAMPTZ 格式(带时区)。
  2. 批量操作:使用 PreparedStatement 和批处理提高写入性能。
  3. 连接池:生产环境中建议使用 HikariCP 或 PostgreSQL 的连接池。
  4. SQL 方言:TimescaleDB 支持部分 PostgreSQL 扩展语法(如 CREATE HYPERTABLE)。

相关文章:

  • 米尔电子-LR3568-烧录鸿蒙
  • 倒排索引(Inverted Index)
  • 【从二维到一维:动态规划——01背包完全背包的空间优化之路】—— 经典例题解答,将问题转化为背包问题
  • 在线json转ArkTs-harmonyos
  • 《 YOLOv5、YOLOv8、YOLO11训练的关键文件:data.yaml文件编写全解》
  • 再聊 Flutter Riverpod ,注解模式下的 Riverpod 有什么特别之处,还有发展方向
  • Java集合_八股场景题
  • C# backgroundworker类
  • [20250304] 关于 RISC-V芯片 的介绍
  • 游戏引擎学习第149天
  • 快速谱峭度算法解析
  • Ubuntu用户安装cpolar内网穿透
  • leetcode日记(88)对称二叉树
  • MySQL数据库操作
  • 应急响应--流量分析
  • HTML页面中divborder-bottom不占用整个底边,只占用部分宽度
  • Yashan DB 存储结构
  • 19. 大数据-技术生态简介
  • 前端非技术性场景面试题
  • 第4节: 静态路由与动态路由协议(RIP、OSPF)详解
  • 黑龙江省政府副秘书长许振宇,拟任正厅级领导
  • 澳大利亚首例“漂绿”诉讼开庭:能源巨头因“碳中和”承诺遭起诉
  • 陕西榆林:全力推进榆林学院升格榆林大学
  • 沪指跌0.68%报3380.82点,创指跌1.92%:券商、军工跌幅靠前
  • 蚊媒传染病、手足口病……上海疾控发布近期防病提示
  • 2025财政观察|长三角“三公”经费普降,钱要用在刀刃上