暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

初探 TDengine 涛思数据库

原创 JiekeXu 2024-10-12
606

前  言

在墨天轮 2024 年 10 月的中国数据库流行度排行榜上,本月又比上月减少了 10 款数据库,仅有 225 款数据库参与排名,记得在七八月份的时候还有 285 款产品参与排名,看来这一半年的时间消失了大约 60 款不知名的数据库,而在排行榜上排名靠前的时序数据库 TDengine 则是今天要了解的一款产品。

TDengine 核心是一款高性能、集群开源、云原生的时序数据库(Time Series Database,TSDB),专为物联网IoT平台、工业互联网、电力、IT 运维等场景设计并优化,具有极强的弹性伸缩能力。同时它还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一个支持 SQL 的高性能、分布式的物联网IoT、工业大数据平台。它由北京涛思数据科技有限公司(TAOS Data)开发,拥有自主知识产权、100% 自主可控,采用 AGPL 许可证,已经将 TDengine 的内核(存储、计算引擎和集群)100% 开源。

那么,什么是时序数据呢?时序数据则是时间序列数据(Time-Series Data),它们是一组按照时间发生先后顺序进行排列的序列数据。像智慧城市、物联网、车联网、工业互联网等领域各种类型的设备都会产生海量的时序数据。时序数据有如下十大特征:

时序数据在电力能源领域、车联网/轨道交通领域、IT 运维领域、金融领域等均有丰富的应用场景。如果想要高效地处理时序数据,一个完整的时序数据处理平台一定要准备好数据库(Database)、数据订阅(Data Subscription)、ETL(Extract, Transform, Load)、流计算(Stream computing)、缓存(Cache)等五大核心模块。而数据库则需要提供时序数据的高效存储和读取能力,比较传统的存储方案是使用 MySQL、Oracle 等关系型数据库,也有 Hadoop 体系的 HBase,专用的时序数据库则有 InfluxDB、OpenTSDB、Prometheus 等。

那么,TDengine 则应用而生,它是一个高性能、分布式的时序数据库。通过集成的缓存、数据订阅、流计算和数据清洗与转换等功能,TDengine 已经发展成为一个专为物联网、工业互联网、金融和 IT 运维等关键行业量身定制的时序大数据平台。自 2019 年 7 月 以来, 涛思数据陆续将 TDengine 的不同版本开源,包括单机版(2019 年 7 月)、集群版(2020 年 8 月)以及云原生版(2022 年 8 月)。开源之后,TDengine 迅速获得了全球开发者的关注,多次在 GitHub 网站全球趋势排行榜上位居榜首,为满足不同用户的需求和场景,涛思数据推出 TDengine 系列产品,包括开源版 TDengine OSS、企业版 TDengine Enterprise 以及云服务 TDengine Cloud。

TDengine OSS 是一个开源的高性能时序数据库,与其他时序数据库相比,它的核心优势在于其集群开源、高性能和云原生架构。而且除了基础的写入、查询和存储功能外,TDengine OSS 还集成了缓存、流式计算和数据订阅等高级功能,这些功能显著简化了系统设计,降低了企业的研发和运营成本。

在 TDengine OSS 的基础上,企业版 TDengine Enterprise 提供了增强的辅助功能,包括数据的备份恢复、异地容灾、多级存储、视图、权限控制、安全加密、IP 白名单、支持 MQTT、OPC-UA、OPC-DA、PI、Wonderware、Kafka 等各种数据源。这些功能为企业提供了更为全面、安全、可靠和高效的时序数据管理解决方案。

TDengine Cloud 作为一种全托管的云服务,存储与计算分离,分开计费,为企业提供了企业级的工具和服务,彻底解决了运维难题,尤其适合中小规模的用户使用。

TDengine 组件介绍

在 TDengine 的安装包中,除了 TDengine 数据库引擎 taosd 以外,还提供了一些附加组件,以方便用户的使用。taosAdapter 是应用和 TDengine 之间的桥梁;taosKeeper 是TDengine 监控指标的导出工具;taosX 是数据管道(data pipeline)工具;taosExplorer 是可视化图形管理工具;taosc 是 TDengine 客户端驱动。下图展示了整个 TDengine 产品生态的拓扑架构(组件 taosX、taosX Agent 仅 TDengine Enterprise 提供)。通常 TDengine 会运行多个进程,包括taosd、taosadapter、taoskeeper、taos-explorer 和 taosx。

TDengine 产品生态拓扑架构

taosd

在 TDengine 中,taosd 是一个关键的守护进程,同时也是核心服务进程。它负责处理所有与数据相关的操作,包括数据写入、查询和管理等。在 Linux 操作系统中,用户可以利用 systemd 命令来便捷地启动、停止 taosd 进程。为了查看 taosd 的所有命令行参数,用户可以执行 taosd -h 命令。taosd 进程的日志默认存储在 /var/log/taos/ 目录下,方便用户进行日志查看和管理。

taosc

taosc 是 TDengine 的客户端程序,为开发人员提供了一组函数和接口,以便编写应用程序并连接到 TDengine,执行各种 SQL。由于 taosc 是用 C 语言编写的,因此可以轻松地与 C/C++ 应用程序集成。当使用其他编程语言与 TDengine 交互时,如果使用原生连接,也需要依赖 taosc。这是因为 taosc 提供了与 TDengine 通信所需的底层协议和数据结构,确保了不同编程语言应用程序能够顺利地与 TDengine 进行交互。

taosAdapter

taosAdapter 是 TDengine 安装包中的一个标准组件,充当着 TDengine 集群与应用程序之间的桥梁和适配器角色。它支持用户通过 RESTful 接口和 WebSocket 连接访问TDengine 服务,实现数据的便捷接入和处理。taosAdapter 能够与各种数据收集代理工具(如 Telegraf、StatsD、collectd 等)无缝对接,从而将数据导入 TDengine。此外,它还提供了与 InfluxDB/OpenTSDB 兼容的数据写入接口,使得原本使用 InfluxDB/OpenTSDB 的应用程序能够轻松移植到 TDengine 上,无须进行大量修改。

taosKeeper

taosKeeper 是 TDengine 3.0 版本中新增的监控指标导出工具,旨在方便用户对TDengine 的运行状态和性能指标进行实时监控。通过简单的配置,TDengine 能够将其运行状态、指标等信息上报给 taosKeeper。当接收到监控数据后,taosKeeper 会利用 taosAdapter 提供的 RESTful 接口,将这些数据存储到 TDengine 中。

taosExplorer

为了简化用户对数据库的使用和管理,TDengine Enterprise 引入了一个全新的可视化组件—taosExplorer。这个工具为用户提供了一个直观的界面,方便用户轻松管理数据库系统中的各类元素,如数据库、超级表、子表等,以及它们的生命周期。通过 taosExplorer,用户可以执行 SQL 查询,实时监控系统状态、管理用户权限、完成数据的备份和恢复操作。此外,它还支持与其他集群之间的数据同步、导出数据,以及管理主题和流计算等功能。

taosX

taosX 作为 TDengine Enterprise 的数据管道功能组件,旨在为用户提供一种无须编写代码即可轻松对接第三方数据源的方法,实现数据的便捷导入。目前,taosX 已支持众多主流数据源,包括 AVEVA PI System、AVEVA Historian、OPC-UA/DA、InfluxDB、OpenTSDB、MQTT、Kafka、CSV、TDengine 2.x、TDengine 3.x、MySQL、PostgreSQL和 Oracle 等。

taosX Agent

taosX Agent 是 TDengine Enterprise 数据管道功能的重要组成部分,它与 taosX 协同工作,负责接收 taosX 下发的外部数据源导入任务。taosX Agent 能够启动连接器或直接从外部数据源获取数据,随后将采集的数据转发给 taosX 进行处理。

TDengine 存储结构

在内存里,为减小内存开销,有效的处理时间乱序问题,TDengine 采用行式存储,使用 SkipList 建立索引,而且内存按照 First In First Out 的方式进行管理。但在持久化存储上,为充分利用时序数据特点,TDengine 采用列式存储,而且每个表的数据是一块一块连续存储的,以最大程度的提高压缩率和数据读取速度,并且每个数据块都有预计算,进一步提高数据分析速度。


数据具体写如流程如图所示:

写入数据时,先将数据点写进 WAL 日志,然后转发给其他副本。当内存的剩余空间达到一定临界值时, 内存数据将写入硬盘。内存的管理完全采取先进先出的队列方式进行管理,这样保证最新采集的数据在内存里。数据写入硬盘是以添加日志的方式进行的,以大幅提高落盘的速度。为避免合并操作,每个采集点(表)的数据也是按块存储,在一个块内,数据点是按列连续存放的,但块与块之间可以不是连续的。 TDengine 对每张表会维护一索引,保存每个数据块在文件中的偏移量,起始时间、数据点数、压缩算法等信息。

数据分区:每个数据文件仅仅保存固定一段时间的数据(比如一周,可配置),因此一个表的数据会分布在多个数据文件中。查询时,根据给定的时间段,TDengine 将计算出查找的数据会在哪个数据文件,然后读取。这样大幅减少了硬盘操作次数。多个数据文件的设计还有利于同步、恢复、自动删除操作,更有利于数据按照新旧程度在不同物理介质上存储,比如最新的数据存放在 SSD 盘上,最老的数据存放在大容量但慢速的硬盘上。通过这样的设计,TDengine 将硬盘的随机读取几乎降为零,从而大幅提升写入和查询效率,让 TDengine 在很廉价的存储设备上也有超强的性能。

TDengine 里,一个表的数据虽然会按时间段分区,但不会跨节点存储,以便于单张表的快速高效的插入、查询和计算。一张表(一个采集点)的数据,即使每秒产生一百个字节的数据量,一年也才 3G 的数据量,压缩后,往往还不到 300M,因此这样的处理不会带来问题。

快速体验单机环境

TDengine 完整的软件包包括服务端(taosd)、应用驱动(taosc)、用于与第三方系统对接并提供 RESTful 接口的 taosAdapter、命令行程序(CLI,taos)和一些工具软件目前 TDinsight 仅在 Linux 系统上安装和运行,后续将支持 Windows、macOS 等系统。TDengine 除了提供多种语言的连接器之外,还通过 taosAdapter 提供 RESTful 接口。为方便使用,标准的服务端安装包包含了 taosd、taosAdapter、taosc、taos、taosdump、taosBenchmark、TDinsight 安装脚本和示例代码;如果您只需要用到服务端程序和客户端连接的 C/C++ 语言支持,也可以仅下载 Lite 版本的安装包。

运行环境要求

在Linux系统中,运行环境最低要求如下:

Linux 内核版本 - 3.10.0-1160.83.1.el7.x86_64;

glibc 版本 - 2.17;

如果通过clone源码进行编译安装,还需要满足:

cmake版本 - 3.26.4或以上;

gcc 版本 - 9.3.1或以上;

软件安装

通过此网站获取 RPM 包https://docs.taosdata.com/get-started/package/ ,但是当点击下载时弹出如下所示的对话框,要求输入接收下载链接的邮箱,着实不太方便。

然后我们安装此 RPM 包,注意操作系统内核版本以及glibc 版本是否满足上述要求


[root@JiekeXu ~]# rpm -ivh TDengine-server-3.3.3.0-Linux-x64.rpm

Preparing... ################################# [100%]

Updating / installing...

1:tdengine-3.3.3.0-3.el7 ################################# [100%]

Start to install TDengine...

System hostname is: JiekeXu

Enter FQDN:port (like h1.taosdata.com:6030) of an existing TDengine cluster node to join

OR leave it blank to build one: ###回车

Enter your email address for priority support or enter empty to skip: ###回车

Created symlink from /etc/systemd/system/multi-user.target.wants/taosd.service to /etc/systemd/system/taosd.service.

To configure TDengine : edit /etc/taos/taos.cfg

To configure taosAdapter : edit /etc/taos/taosadapter.toml

To configure taos-explorer : edit /etc/taos/explorer.toml

To start TDengine server : sudo systemctl start taosd

To start taosAdapter : sudo systemctl start taosadapter

To start taoskeeper : sudo systemctl start taoskeeper

To start taos-explorer : sudo systemctl start taos-explorer

TDengine is installed successfully!

To start all the components : sudo start-all.sh

To access Commnd Line Interface : taos -h JiekeXu

To access Graphic User Interface : http://JiekeXu:6060
复制


安装完成之后,我们按照提示启动 TDengine 相关的服务进程。


systemctl start taosd

systemctl start taosadapter

systemctl start taoskeeper

systemctl start taos-explorer
复制


你也可以直接运行 start-all.sh 脚本来启动上面的所有服务,stop-all.sh 停止所有服务

TDengine 提供一命令行应用程序(以下简称为 TDengine CLI)taos。要进入 TDengine 命令行,您只要在终端执行 taos 即可,命令提示符为 taos>

在 TDengine CLI 中,用户可以通过 SQL 命令来创建/删除数据库、表等,并进行数据库(Database)插入查询操作。在终端中运行的 SQL 语句需要以分号(;)结束来运行。示例:


CREATE DATABASE JiekeXu;

use JiekeXu;

CREATE TABLE test (ts TIMESTAMP, speed INT);

INSERT INTO test VALUES ('2024-10-15 00:00:00', 10);
INSERT INTO test VALUES ('2024-10-15 01:00:00', 20);
SELECT * FROM test;

taos> show databases;
              name              |
=================================
 information_schema             |
 performance_schema             |
 log                            |
 jiekexu                        |
Query OK, 4 row(s) in set (0.001012s)
复制


除执行 SQL 语句外,系统管理员还可以从 TDengine CLI 进行检查系统运行状态、添加删除用户账号等操作。

比如创建用户:

create user test pass '123456' sysinfo 1;

SYSINFO 表示该用户是否能够查看系统信息。1 表示可以查看,0 表示无权查看。系统信息包括服务配置、dnode、vnode、存储等信息。缺省值为 1。

比如查看用户:

SHOW USERS;

或者,可以查询内置系统表 INFORMATION_SCHEMA.INS_USERS 来获取用户信息。

select * from information_schema.ins_users;

可视化界面

在完成 TDengine 的安装与启动流程之后,用户便可立即开始使用 taosExplorer。该组件默认监听 TCP 端口 6060,用户只须在浏览器中输入 http://<IP>:6060/login(其中的IP 是用户自己的地址),为了提供更好的技术支持,在使用 TDengine 图形化管理系统前先行注册,注册过程必须保证 explorer 可连接互联网,否则无法注册成功。注册成功后,可内网使用,无需再连接互联网。后续登录,请使用数据库用户名密码登录。



今天就先到这里了,更多精彩内容,后续有时间我们接着学习接着写,拜拜!

参考链接

《TDengine白皮书》https://www.modb.pro/doc/59219

官方文档:https://docs.taosdata.com/intro/

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

❤️ 欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————

facebook_pro_light_1920 × 1080  副本.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论