TimescaleDB 入门

在本文中,我们将探讨TimescaleDB ,这是一个构建在PostgreSQL之上的开源时间序列数据库。我们将深入研究其特性,检查其功能,并讨论如何有效地与该数据库交互。

什么是TimescaleDB
TimescaleDB 是 PostgreSQL 的开源数据库扩展,旨在有效处理时间序列数据。它扩展了 PostgreSQL 的功能,为时间序列数据提供专用功能,包括自动时间分区、优化索引和压缩。

让我们简要了解一下它的一些主要功能:

  • 超级表是 TimescaleDB 中的一个关键概念。它们是按时间自动分区数据的 PostgreSQL 表。
  • 它支持连续聚合,允许我们预先计算和存储聚合。它通过避免在查询时动态计算聚合的需要来提高查询性能。
  • 它采用先进的压缩技术来最大限度地减少存储需求,同时保持查询性能。
  • TimescaleDB使用多维索引和基于时间的索引来加速查询,使其非常适合时间序列数据。

安装
要开始使用 TimescaleDB,我们首先需要确保我们的计算机上安装了 PostgreSQL。我们可以使用操作系统的包管理器来安装 PostgreSQL,或者从 PostgreSQL 的网站下载它。

成功安装PostgreSQL后,我们可以继续安装TimescaleDB。在开始安装之前,我们还需要安装Homebrew :

brew tap timescale/tap
brew install timescaledb


使用TimescaleDB
初始化TimescaleDB
成功安装后,让我们连接到 PostgreSQL 实例并运行查询来初始化 TimescaleDB 实例:

CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

此查询设置必要的扩展并准备我们的 PostgreSQL 环境以进行高效的时间序列数据处理。

创建超级表
TimescaleDB引入了Hypertable的概念,它是针对时间序列存储优化的分区表。超表始终按时间分区,因为它适用于时间序列数据,并且还具有在其他列上分区的灵活性。我们可以使用支持的数据类型之一进行分区:date、smallint、int、bigint、timestamp和timestamptz。

创建超级表涉及首先创建一个表,然后将其转换为超级表。我们首先创建一个常规表:

CREATE TABLE employee(
    id int8 NOT NULL,
    name varchar(255) NOT NULL,
    login_time timestamp,
    logout_time timestamp);

现在,让我们将其转换为超表:

SELECT create_hypertable('employee', by_range('login_time'));

create_hypertable()所需的参数是表名 employee 和维度构建器 by_range('login_time')。
维度生成器定义我们要使用哪一列来对表进行分区。

在这种情况下,我们可以跳过维度构建器,因为create_hypertable()自动假定单个指定列默认按时间进行范围分区。

对于表中现有的数据,我们可以包含migrate_data 选项进行迁移:

SELECT create_hypertable('employee', by_range('login_time'), migrate_data => true);

插入和查询数据
超级表就位后,我们就可以开始添加数据了。 TimescaleDB 提供了处理大量时间戳信息的有效机制。让我们执行插入:

INSERT INTO employee values('1', 'John', '2023-01-01 09:00:00', '2023-01-01 18:30:00');
INSERT INTO employee values('2', 'Sarah', '2023-01-02 08:45:12', '2023-01-02 18:10:10');

TimescaleDB 引人注目的功能之一是它能够使用标准 SQL 对时间序列数据执行高效查询。数据成功填充后,让我们继续查询它:

SELECT * FROM employee WHERE login_time BETWEEN '2023-01-01 00:00:00' AND '2023-01-01 12:00:00';

此查询检索特定时间范围内的数据,展示了使用 TimescaleDB 分析和可视化时间序列数据的简便性。

结论
在本文中,我们快速概述了 TimescaleDB,深入研究了设置和查询数据的基本步骤。 TimescaleDB 可以有效地处理大型时间序列数据集,这对于各种应用程序中的稳健数据管理来说非常有价值。