首页 > 数据库 >时序数据库TimescaleDB 功能介绍、单节点、集群安装部署、centos、linux

时序数据库TimescaleDB 功能介绍、单节点、集群安装部署、centos、linux

时间:2023-08-15 15:12:33浏览次数:85  
标签:PostgreSQL 超表 centos TimescaleDB linux 数据 节点 分布式

简介

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');

标签:PostgreSQL,超表,centos,TimescaleDB,linux,数据,节点,分布式
From: https://www.cnblogs.com/wchb/p/17631334.html

相关文章

  • 掌握Linux Top命令:优化系统性能的关键
    简介:在Linux系统中,了解系统的当前状态以及资源的使用情况对于管理员和开发人员来说至关重要。Linux提供了许多工具来监视和管理系统性能,其中一个最重要的工具是Top命令。本文将介绍如何使用Top命令来监视系统资源、进程和性能,并提供一些实用的技巧来优化系统性能。1.什么是Top命令......
  • 在Linux系统中如何给文件夹设置777权限?
    Linux系统秉承着“一切皆文件”的原则,所以就需要对文件的权限进行把控,如果不对文件进行权限把控,很容易给自己和别人造成损失和困扰。那么如何给文件夹设置777权限呢?以下是详细的内容:在Linux系统中,文件和文件夹有不同的权限控制。其中,777权限是指具有读、写和执行权限的最......
  • 我的Linux网络之行1-基础网络知识
    前言最近不光在解决项目的问题,也遇到过部分的网络问题,发现自己对于网络的知识还是非常匮乏的,因而在此做一些归纳,记录也是分享,当然我的分享应该不是最全的,但个人认为有些东西就算分享出来,用不到也是白折腾。Wi-Fi的相关名词介绍到一家店里面,以前我们经常喊:老板,你们这边的WIFI叫......
  • 【Linux技术专题】「必备基础知识」带你仔细梳理一下平时排查问题查询日志的基本操作
    Linux文件与目录管理了解和熟悉Linux系统的文件存储结构、权限设置和命令行工具,将有助于快速定位和解决与日志相关的问题,提高系统管理员和开发人员的工作效率。文件路径:Linux系统的日志文件按规定的目录结构组织。了解不同日志文件的存储位置和命名规则,可更快地找到所需的日志文件......
  • Linux—控制服务和守护进程
    Linux控制服务和守护进程1、守护进程简介1.1为什么会有守护进程?在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就是这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。但是守护进程却能够突破这种限制......
  • Linux配置互信
    例如有以下两台机需要做互信192.168.128.128192.168.128.1291、在服务器192.168.128.128生成公钥私钥对[[email protected]]#ssh-keygen-trsaGeneratingpublic/privatersakeypair.Enterfileinwhichtosavethekey(/root/.ssh/id_rsa):Enterpassphrase(emptyf......
  • linux安装Nginx
    1.离线安装rpm-qa|grep"gcc" 或者yumlistinstalled|grep"gcc"查看是否安装第一步:gcc依赖下载镜像地址:官网:https://gcc.gnu.org/releases.html阿里云镜像站:http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/CentOS镜像站点:https://vault.centos.org/7.5.1804/o......
  • Linux之sed命令详解
    sed是一种流编辑器,它是文本处理中非常好的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文......
  • linux下安装xxljob
    一.环境准备服务器上需要安装jdk和maven(1).jdk下载地址:https://www.oracle.com/java/technologies/downloads/(2)下载完成后上传到linux服务器上(3)然后解压使用tar-zxvf jdk-8u351-linux-x64.tar.gz(tar包名改成自己版本的)(4)配置jdk环境变量vimetc/profile:exportJAVA_HOME=......
  • linux环境下监控docker进程运行情况,使用钉钉群机器人报警异常服务
    背景:在linux环境下,很多服务我们都使用docker来跑,很是方便,容器服务独立,配置独立,数据独立等等,但是有个问题,就是如果某个服务异常了,暂停了,停止了,一直重启中,我们要怎么及时的知道是哪个服务,并进行处理,保证业务正常运行。本文主要介绍使用docker服务自带的一些命令来实现一个基本的监......