PostgreSQL 之上的开源时序数据库 TimescaleDB 详解

TimescaleDB 是一个构建于 PostgreSQL 之上的开源时序数据库,它完全兼容 PostgreSQL 的所有功能和生态。配置 TimescaleDB 主要分为几个步骤:安装、创建扩展、配置以及优化。


下面将提供一个详细的配置指南。

1. 安装 TimescaleDB

首先,需要在系统上安装 TimescaleDB。

对于 macOS (使用 Homebrew)
bash 复制代码
brew tap timescale/tap
brew install timescaledb
对于 Ubuntu/Debian
bash 复制代码
# 添加 Timescale 的第三方仓库
sudo sh -c "echo 'deb [signed-by=/usr/share/keyrings/timescale.key] https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main' > /etc/apt/sources.list.d/timescaledb.list"
wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/timescale.key
sudo apt-get update

# 安装 TimescaleDB
sudo apt-get install timescaledb-2-postgresql-14 # 请确保 PostgreSQL 版本号正确
对于 RHEL/CentOS (使用 yum)
bash 复制代码
# 添加 Timescale 的第三方仓库
sudo tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL

sudo yum update -y
sudo yum install -y timescaledb-2-postgresql-14 # 请确保 PostgreSQL 版本号正确

2. 配置 PostgreSQL 以加载 TimescaleDB

安装完成后,需要修改 PostgreSQL 的配置文件 postgresql.conf 来预加载 TimescaleDB 库。

  1. 找到 postgresql.conf 文件。它的位置通常类似于:

    • macOS (Homebrew): /usr/local/var/postgres/postgresql.conf
    • Linux: /etc/postgresql/14/main/postgresql.conf/var/lib/pgsql/14/data/postgresql.conf
  2. 修改配置,添加或确保以下行存在:

    conf 复制代码
    shared_preload_libraries = 'timescaledb'

    如果 shared_preload_libraries 已经有其他值,用逗号分隔,例如: 'timescaledb, pg_stat_statements'

  3. 重启 PostgreSQL 服务以使配置生效。

    bash 复制代码
    # macOS (Homebrew)
    brew services restart postgresql
    
    # Ubuntu/Debian
    sudo systemctl restart postgresql
    
    # RHEL/CentOS
    sudo systemctl restart postgresql-14

3. 创建数据库和启用 TimescaleDB 扩展

现在,连接到 PostgreSQL 并创建一个数据库,然后在该数据库中启用 TimescaleDB 扩展。

  1. 使用 psql 连接到 PostgreSQL:

    bash 复制代码
    psql -U postgres -h localhost
  2. 创建一个新数据库(可选,也可以使用现有数据库):

    sql 复制代码
    CREATE DATABASE timeseries_db;
    \c timeseries_db; -- 连接到新创建的数据库
  3. 启用 TimescaleDB 扩展

    sql 复制代码
    CREATE EXTENSION IF NOT EXISTS timescaledb;

4. 将表转换为超表

TimescaleDB 的核心概念是 超表,它是为自动分区和管理时序数据而设计的。

  1. 创建一个标准的 PostgreSQL 表。一个典型的时序表结构如下:

    sql 复制代码
    CREATE TABLE conditions (
      time        TIMESTAMPTZ       NOT NULL,
      location    TEXT              NOT NULL,
      temperature DOUBLE PRECISION  NULL,
      humidity    DOUBLE PRECISION  NULL
    );
  2. 使用 SELECT create_hypertable() 函数将此表转换为超表:

    sql 复制代码
    SELECT create_hypertable('conditions', 'time');
    • 'conditions' 是表名。
    • 'time' 是作为时间维度的列名。

5. 重要配置调优

TimescaleDB 提供了一个工具 timescaledb-tune,它可以自动分析系统并根据硬件配置推荐优化的 PostgreSQL 设置。

  1. 安装 timescaledb-tune(通常与 TimescaleDB 包一起安装)。

  2. 运行该工具(可能需要 sudo):

    bash 复制代码
    timescaledb-tune --yes --dry-run
    • --dry-run 会先打印出推荐的配置,而不直接应用。
    • 确认无误后,去掉 --dry-run 再次运行以应用配置。
    bash 复制代码
    timescaledb-tune --yes
  3. 应用配置后,务必重启 PostgreSQL

6. 其他有用的配置

也可以在数据库会话或 postgresql.conf 中手动设置一些常用参数。

  • 维护工作进程:用于执行后台作业(如数据保留策略)。

    sql 复制代码
    -- 在 psql 中执行
    SET timescaledb.maintenance_workers = 4;

    或在 postgresql.conf 中设置:

    conf 复制代码
    timescaledb.maintenance_workers = 4
  • 并行处理:利用多核CPU加速查询。

    sql 复制代码
    SET max_parallel_workers_per_gather = 4;

7. 验证安装和配置

最后,可以运行一些命令来验证 TimescaleDB 是否已正确安装和配置。

sql 复制代码
-- 列出所有已安装的扩展,应该能看到 timescaledb
\dx

-- 显示所有的超表
SELECT * FROM timescaledb_information.hypertables;

-- 显示超表的详细信息,包括分区块等
SELECT * FROM timescaledb_information.chunks;

总结

一个典型的 TimescaleDB 配置流程如下:

  1. 安装:通过包管理器安装。
  2. 预加载 :修改 postgresql.conf,添加 shared_preload_libraries = 'timescaledb'
  3. 重启:重启 PostgreSQL 服务。
  4. 创建扩展 :在目标数据库中执行 CREATE EXTENSION timescaledb;
  5. 创建超表 :创建普通表后,使用 create_hypertable() 函数进行转换。
  6. 调优 :使用 timescaledb-tune 工具优化 PostgreSQL 配置。
  7. 验证:通过查询系统视图确认一切正常。

完成以上步骤后,TimescaleDB 就已经配置好并可以开始使用了。可以像使用普通 PostgreSQL 表一样使用超表,同时享受 TimescaleDB 为时序数据带来的高性能和自动化管理功能。

相关推荐
weixin_377634842 小时前
【开源简历解析】SmartResume 0.6B模型实现96%准确率
开源·简历解析
颜大哦2 小时前
linux安装mysql
linux·运维·mysql·adb
学习3人组2 小时前
Node.js 网站服务器开发
运维·服务器·node.js
来知晓2 小时前
Linux:WSL内存空间管理之清完内存C盘可用空间不增问题解决
linux·运维·服务器
sadandbad3 小时前
[vulhub靶机通关]DC-2(rbash绕过_git提权)
网络·sql·web安全·网络安全
熊文豪3 小时前
openEuler 云原生实战:部署高性能 Redis 集群与压测分析
数据库·redis·云原生·openeuler
GTgiantech3 小时前
科普SFP 封装光模块教程
服务器·网络·数据库
深圳市恒讯科技3 小时前
如何在服务器上安装和配置数据库(如MySQL)?
服务器·数据库·mysql
言之。3 小时前
TiDB分布式数据库技术架构概述
数据库·分布式·tidb