简介

Timescale Documentation | Getting started with Timescale

Timescale是一个用于时间序列,事件和分析的PostgreSQL数据平台。 提供了PostgreSQL的可靠性,这是时间序列的超能力 TimescaleDB,。它提供 自动备份和还原、复制的高可用性等功能, 无缝缩放和调整大小等等

性能对比:TimescaleDB vs. InfluxDB:专为时间序列数据构建

优势

  1. 优化的查询性能:TimescaleDB 使用了分区和数据分片技术,将数据分散到多个分区中,从而可以并行处理查询操作。这使得查询性能得到显著提升,特别是在大数据量的情况下。
  2. 无缝集成:TimescaleDB 是基于 PostgreSQL 构建的扩展,因此可以轻松地与现有的 PostgreSQL 生态系统集成。你可以继续使用 PostgreSQL 的功能,同时获得时间序列数据处理的优势。
  3. 连续聚合:连续聚合是 TimescaleDB 的一个强大特性,它允许在数据插入的同时计算和维护聚合数据,从而大大减少了后续查询的计算成本。
  4. 自动数据分层:TimescaleDB 支持数据分层,可以将历史数据分为不同的层级,从而更有效地管理长期存储的数据。这有助于在保持查询性能的同时控制存储成本。
  5. 高可用性和容错性:TimescaleDB 支持在集群中复制数据以实现高可用性和容错性。你可以设置主从复制或多节点集群来确保数据的可靠性和持续性。
  6. 丰富的时间序列函数和操作:TimescaleDB 提供了许多针对时间序列数据的内置函数和操作,使你可以轻松地进行时间序列分析和操作。
  7. 社区支持和活跃度:TimescaleDB 拥有一个活跃的开源社区,不断更新和改进,同时提供文档和支持,使用户能够更好地使用和理解该技术。
  8. 可扩展性:由于 TimescaleDB 基于 PostgreSQL,因此它继承了 PostgreSQL 的可扩展性特性。你可以根据需要调整硬件和配置,以适应不断增长的数据量和查询负载

 

术语

Hypertables(超级表)

它将时间序列数据根据时间进行分区和组织,从而实现更高效的查询性能

distributed hypertable(分布式超表)

使用空间分区,将数据分布存储在多个数据节点上

Chunks(块)

TimescaleDB自动将Hypertable分割成块,每个块对应于一个特定的时间间隔和一个分区键。这些分区是不重合的,这有助于查询器进行查询

连续聚合

连续聚集表是TimescaleDB的一个重要特性,它可以在后台自动维护预定义的聚合数据。通过使用连续聚集表,可以极大地提高大规模时序数据的查询性能

核心概念

数据模型

PostgreSQL JSON和JSONB:如果您正在使用半结构化数据,例如来自 IoT 传感器的读数 如果收集不同的测量值,您可能需要灵活的架构。在此 在这种情况下,您可以使用PostgreSQL JSON和JSONB数据类型。

 

关系型:固定模式的关系数据结构

 

由于Timescale底层基于PostgreSQL做数据存储,不仅支持普通的PostgreSQL表,还支持超表,超表是Timescale对时间序列数据存储和查询的优化。

普通表

普通的PostgreSQL表

超表(Hypertables)

超表是专门为时间序列数据设计的,一个 超级表始终按时分区,但也可以在 其他列也是如此。超表的另一个特别之处在于 它们被分解为称为块的较小表

分布式超表

分布式超表是跨多个节点的超表,分布式超表用于多节点群集。每个集群都有一个 访问节点和多个数据节点。您可以使用 访问节点,并且数据存储在数据节点上

超级表的每个区块仅保存特定时间范围的数据。当你 插入尚未具有区块的时间范围(时间刻度)的数据 自动创建一个区块来存储它。

 

完整的 SQL

Timescale 支持完整的 SQL,因此无需学习自定义查询语言

数据插入

提供并行复制工具 ,支持多种数据导入:标准sql-insert写入、Prometheus 、Kafka 、.csv文件导入

连续聚合

连续聚集表是TimescaleDB的一个重要特性,它可以在后台自动维护预定义的聚合数据。通过使用连续聚集表,可以极大地提高大规模时序数据的查询性能

 

物化视图

是一个标准的PostgreSQL函数。 它们用于缓存复杂查询的结果,以便您可以重用它 后来。实例化视图不会定期更新,但您可以手动更新 根据需要刷新它们

连续聚合

自动更新的物化视图

实时聚合

即在查询时将聚合数据和原始数据结合起来,以获得新的结果,连续聚合视图默认开启了实时聚合,如果关闭,则在查询的时候,只会查询已经物化的数据。

聚合函数

函数允许您将数据聚合到 时间桶,例如:5 分钟、1 小时或 3 天。TimescaleDB提供了一系列内置的时间序列聚合函数,用于计算给定时间范围内的统计信息,如平均值、最大值、最小值等。

 

例子:在名为 的表中计算每日平均温度。该表具有一个名为的时间列和一列:weather_conditions、 time 、temperature

SELECT time_bucket('1 day', time) AS bucket,
  avg(temperature) AS avg_temp
FROM weather_conditions
GROUP BY bucket
ORDER BY bucket ASC;

 

超函数

超函数是一组专门的函数,允许您 分析时间序列数据。您可以使用超函数来分析任何内容 已存储为时间序列数据,包括物联网设备、IT 系统、营销 分析、用户行为、财务指标和加密货币。

超函数允许您快速执行关键的时间序列查询, 分析时间序列数据,并提取有意义的信息。他们的目标是 识别、构建和组合 SQL 需要执行的所有功能 将时间序列分析到单个扩展

 

存储管理

分区

 

时间分区:

当创建和使用超级表时,它会自动按时间对数据进行分区, 并可选择按空间分区

每个超级表都由称为块的子表组成。分配的每个块 时间范围,并且仅包含该范围的数据。默认情况下,每个区块包含 7 天,可以通过chunk_time_interval来进行设置。分布式超表默认使用空间分区。

 

空间分区

建议对分布式超级表使用空间分区,以实现高效的横向扩展性能。对于仅存 在于单个节点上的常规超表,额外的分区可用于特殊用例,不建议大多数用户使用

空间分区使用散列:每个不同的项目都被散列到 N 个存储桶之一。请记住,我们已经在使用(灵活的)时间间隔来管理块大小;空间分区的主要目的是在同一时间间隔内跨多个数据节点(在分布式超级表的情况下)或跨多个磁盘(在单节点部署的情况下)实现并行化

压缩

压缩时序数据可以进一步减少区块大小 超过90%。这样可以节省存储成本,并使查询保持运行 闪电般的速度。

支持按照时间进行自动压缩和手动压缩和解压,在查询期间,未压缩的块将被正常处理,而来自压缩块的数据将在查询时首先被解压缩并转换为标准行格式

 

数据保留

可帮助您通过删除旧数据来节省存储成本。您可以 将数据保留与连续聚合相结合,以降低您的采样数据。

在时间序列应用程序中,随着数据年龄的增长,数据通常变得不那么有用。如果 您不需要您的历史数据,您可以在达到一定数据后将其删除 年龄。Timescale 允许您设置自动数据保留策略以丢弃旧数据。你 还可以通过手动删除块来微调数据保留。

通常,您希望保留历史数据的摘要,但不需要 原始数据。您可以通过将数据保留与连续聚合相结合来对旧数据进行缩减采样。

 

数据分层(云端体验版)

通过将数据分层到低成本对象存储层(S3)来节省存储成本

 

 

备份还原

支持PostgreSQL提供的相关功能

 

复制和副本功能

TimescaleDB支持复制和副本功能,可以在多个节点上创建超级表的副本,实现数据冗余和高可用性

 

高可用

TimescaleDB 的多节点安装可以高度可用 通过为群集中的每个节点设置一个或多个备用节点,或者通过 在区块级别本机复制数据。

 

限制

局限性

虽然Timescale通常提供的功能超出了范围 PostgreSQL提供,使用超表有一些限制, 特别是分布式超表。本节文档 同时使用常规和分布式时的常见限制 超级表。

超表限制

  • 不支持引用超表的外键约束。
  • 用于分区的时间维度(列)不能具有 NULL 值。
  • 唯一索引必须包括正在分区的所有列 尺寸。
  • UPDATE在分区(块)之间移动值的语句不是 支持。这包括更新插入 ()。INSERT ... ON CONFLICT UPDATE

分布式超表限制

常规超表的所有限制也适用于分布式 超级表。此外,以下限制特别适用 到分布式超表:

  • 不支持后台作业的分布式调度。后台作业 在访问节点上创建的内容在此访问节点上调度和执行 无需将作业分发到数据节点。
  • 连续聚合可以聚合分布在数据节点上的数据,但 连续聚合本身必须位于访问节点上。这可以 对可以扩展安装的程度进行限制,但因为 连续聚合是数据的下采样,这通常不是 制造问题。
  • 不支持对区块重新排序。
  • 表空间不能附加到访问上的分布式超表 节点。仍然可以在数据节点上附加表空间。
  • 假定角色和权限在 分布式数据库,但不强制实施一致性。
  • 不支持在数据节点上进行联接。使用 加入分布式超表 另一个表要求另一个表驻留在访问节点上。这 还会限制分布式超表上的联接性能。
  • 分布式超表中外键约束引用的表 必须存在于访问节点和所有数据节点上。这也适用于 引用的值。
  • 不支持并行感知扫描和追加。
  • 分布式超表本身不提供一致的还原点 用于跨节点备份和还原。使用 create_distributed_restore_point 命令,并确保在将单个备份还原到 访问和数据节点。
  • 有关本机复制限制,请参阅本机复制部分
  • 用户定义的函数必须手动安装在数据节点上,以便 函数定义在访问节点和数据节点上都可用。 这对于注册到 的函数尤其相关。set_integer_now_func

请注意,这些限制涉及访问节点的使用。一些 当前不支持的功能可能仍适用于单个数据节点, 但这种用法既未经测试,也未得到官方支持。未来版本 的时间尺度可能会消除其中一些限制。

安装单节点

添加 PostgreSQL 第三方存储库

 

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm

创建 TimescaleDB 存储库

tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/$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

更新本地存储库列表:

yum update

安装TimescaleDB数据库:

yum install timescaledb-2-postgresql-14

初始化数据库:

/usr/pgsql-14/bin/postgresql-14-setup initdb

#使用timescaledb-tune脚本配置数据库完成安装后,您需要配置数据库以便可以使用它。
#最简单的方法是运行timescaledb-tune 脚本,它包含在timescaledb-tools软件包中
timescaledb-tune --pg-config=/usr/pgsql-14/bin/pg_config --quiet --yes

配置PostgreSQL

vim /var/lib/pgsql/14/data/postgresql.conf
将#port=5432前面的#删除
将#listen_addresses = 'localhost'改成listen_addresses = '*'

vim /var/lib/pgsql/14/data/pg_hba.conf
在最后面添加一行如下代码,然后保存
host    all             all             0.0.0.0/0               trust

启动PostgreSQL

systemctl enable postgresql-14
systemctl start postgresql-14

## 查看状态
systemctl status postgresql-14

修改postgres账号的密码

# 切换到postgres用户
su - postgres

# 登录数据库
psql

# 修改密码
alter user postgres password '新的密码';

重启服务

sudo systemctl restart postgresql-14.service

时序数据库构建

su - postgres
# 创建库或直接使用postgres库
createdb mydatabase

# 连接到该数据库
psql mydatabase

# 在数据库中加载 TimescaleDB 扩展
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

超级表创建

-- 链接数据库
psql -U postgres -h localhost -d mydatabase

-- 创建超级表
CREATE TABLE conditions (
    time        TIMESTAMPTZ       NOT NULL,
    location    TEXT              NOT NULL,
    temperature DOUBLE PRECISION  NULL,
    humidity    DOUBLE PRECISION  NULL
);

-- 对超级表进行分区
SELECT create_hypertable('conditions', 'time');

SELECT create_hypertable('需要使用时序数据库的表名', '时间索引字段');

搭建集群

图显示了访问节点 (AN) 如何对同一中的数据进行分区 跨多个数据节点(DN1、DN2 和 DN3)

 

节点划分

访问节点AN、数据节点DN

修改数据库配置:

vim /var/lib/pgsql/14/data/postgresql.conf
 
# 访问节点AN
max_prepared_transactions = 500
enable_partitionwise_aggregate = on
jit = off
# 数据节点DN
max_prepared_transactions = 500
wal_level = logical

添加数据节点

# 连接访问节点数据库
psql -U postgres -h localhost -d mydatabase

## 添加数据节点
SELECT add_data_node('dn1','172.31.90.74','mydatabase',5432,false,true,'postgres');
SELECT add_data_node('dn2','172.31.82.237','mydatabase',5432,false,true,'postgres');

此时Timescaledb集群就搭建成功了

创建分布式超表(AN访问节点)

# 创建表
CREATE TABLE test2 (
                       time        TIMESTAMPTZ       NOT NULL,
                       location    TEXT              NOT NULL,
                       temperature DOUBLE PRECISION  NULL,
                       humidity    DOUBLE PRECISION  NULL
);
# 创建分布式超表,默认使用所有数据节点
SELECT create_distributed_hypertable('test2', 'time', 'location');

# 插入数据
INSERT INTO test2 VALUES ('2020-12-14 13:45', 1, '1.2');

#给表增加数据节点
SELECT detach_data_node('dn1', 'test2');
内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/wchb/p/17631334.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!