如何将tdengine集成到thingsboard?

艾瑞博达科技 艾瑞博达科技     2023-01-03     254

关键词:

1 概述

ThingsBoard是用于数据收集、处理、可视化和设备管理的开源物联网平台。它通过行业标准的物联网协议MQTT、CoAP和HTTP实现设备连接,并支持云和本地部署。

ThingsBoard迄今没有导入专业的时序数据库应用,用户可选择的只有PostgreSQL和Cassandra。虽然针对PostgreSQL引入了TimeScale插件,但由于其不是按照宽表的方式组织数据记录,TimeScale的优势根本发挥不出来。总之,这两种数据库不具备高效的数据吞吐能力。

而且,Thingsboard在数据入库时,是将设备的多个遥测值拆分成不同的记录。不断增加了数据冗余量,而且非常不便于使用。

TDengine是涛思数据专为物联网设计和优化的时序数据库。其具有高性能、高可靠、可伸缩、零管理、简单易学等技术特点,提供缓存、数据订阅、流式计算等功能,最大程度减少研发和运维的复杂度。

TDEngine的主要功能特点包括:

  • 类SQL查询语言来插入或查询数据
  • 支持C/C++, Java(JDBC), Python, Go, RESTful, and Node.JS 等开发接口
  • 通过TDengine Shell或Python/R/Matlab可做各种Ad Hoc查询分析
  • 通过连续查询,支持基于滑动窗口的流式计算
  • 引入超级表,让设备之间的数据聚合通过标签变得简单、灵活
  • 内嵌消息队列,应用可订阅最新的数据
  • 内嵌缓存机制,每台设备的最新状态或记录都可快速获得
  • 无历史数据与实时数据之分
  • 安装包仅2.7M

我们通过改造ThingsBaord的JDBC驱动包和新增“保存遥测数据(TDengine)”规则节点,成功用TDEngine替换Cassandra。同时,数据记录以测控点为单位进行组织,有效克服了ThingsBoard时序数据高并发瓶颈问题。

本文主要介绍如何将TDengine集成到ThingsBoard,并进行压力测试。

2 安装部署

2.1 安装TDengine

TDengine软件分为服务器、客户端模块两部分,目前2.0版服务器仅能在Linux系统上安装和运行。客户端可以在Windows或Linux上安装和运行。最新版为:2.0.20.12,这里我们选择2.0.14.0版本。

  • 安装客户端

在Windows环境安装户端,使用安装包快速安装。下载链接:
https://www.taosdata.com/cn/all-downloads/#TDengine-Windows-Clienttaos.dll 在 Windows 系统中安装完客户端之后,驱动包依赖的 taos.dll 文件会自动拷贝到系统默认搜索路径 C:/Windows/System32 下,不需要单独指定。

  • 安装服务器

在Linux环境安装服务器,使用docker安装

docker run -d -v /home/taos/etc:/etc/taos -v /home/taos/lib:/var/lib/taos -v /home/taos/log:/var/log/taos -p 6030:6030 -p 6035:6035 -p 6041:6041 -p 6030-6040:6030-6040/udp tdengine/tdengine:2.0.14.0

进入容器

docker exec -it 4866b36a465c /bin/bash

输入taos命令,如下图所示,说明安装成功

  • 注意事项

如果系统提示找不到FQDN,请参考:

https://www.cnblogs.com/taosdata/p/13690374.html

注意服务器版本与客户端版本必须一致,详细安装流程,请参考:
https://www.taosdata.com/cn/getting-started/

2.2 Thingsboard集成TDengine

新增“保存遥测数据(TDengine)”规则节点

  • 添加依赖

TDengine 为了方便 Java 应用使用,提供了遵循 JDBC 标准(3.0)API 规范的 taos-jdbcdriver 实现。在项目里面引入taos-jdbcdriver依赖,maven 项目中使用如下:

如果使用其它版本,Sonatype Repository 地址:
https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver

  • 修改yml文件

新增数据库连接配置

修改时序数据存储配置

  • 编码

taos-jdbcdriver 的实现包括 2 种形式: JDBC-JNI 和 JDBC-RESTful。以JNI为例

  •  UI 配置

ThingsBoard规则节点UI在官方github仓库一个项目。请参考:
https://github.com/thingsboard/thingsboard-rule-config-ui-ngx

  • 编译

mvn clean install -DskipTests

3 测试

使用脚本向 thingsboard 默认的 mqtt topic (v1/devices/me/telemetry) 推送消息,使用jconsole 查看 Thingsboard 运行环境性能分析信息。

3.1 测试环境

编号

服务

版本

环境

1

Thingsboard

3.2.0

192.168.1.254 (8 核 CPU,16G 内存)

2

Postgres

13.0

192.168.1.88 (4 核 CPU,8G 内存)

3

TDengine

2.0.14

192.168.1.203 (4 核 CPU,8G 内存)

3.2 测试

创建一个测控点类型,选择数据类型,填写 key 映射关系

在“测控点管理”中创建一个测控点类型为“gateway”的测控点

复制令牌,粘贴到脚本中

使用脚本推送数据,创建5000个测控点,向每个测控点每秒推送一条数据,每条数据包含6个key

测控点创建成功

3.3 测试结果

  • 查看测控点历史数据

使用脚本推送数据频率为1条/秒,实际入库频率也为1条/秒

  • 堆内存使用量

通过jconsole查看堆内存使用情况,内存未溢出

以上为Thingsboard集成TDengine说明文档,希望对大家有所帮助。

如何将 Thingsboard 中的时间序列数据作为 CSV 或 JSON 文件保存到外部文件系统? [关闭]

】如何将Thingsboard中的时间序列数据作为CSV或JSON文件保存到外部文件系统?[关闭]【英文标题】:HowtotosavetimeseriesdatainThingsboardtoexternalfilesystemasCSVorJSONfile?[closed]【发布时间】:2022-01-1805:26:18【问题描述】:将时间序列数据保存到... 查看详情

tdengine 是不是支持使用线路协议将数据从 influxdb 传输到 tdengine

】tdengine是不是支持使用线路协议将数据从influxdb传输到tdengine【英文标题】:doestdenginesupporttransferdatafrominfluxdbtotdengineusinglineprotocoltdengine是否支持使用线路协议将数据从influxdb传输到tdengine【发布时间】:2021-12-2106:37:21【问题描... 查看详情

如何将 CSV 文件导入 TDengine 数据库

】如何将CSV文件导入TDengine数据库【英文标题】:HowtoimportCSVfileintoTDenginedatabase【发布时间】:2021-11-2204:13:43【问题描述】:我有一个CSV文件,我想将我的数据导入TDengine数据库。有数据导入教程吗?【问题讨论】:【参考方案1... 查看详情

如何使用JDBC连接TDengine数据库?

】如何使用JDBC连接TDengine数据库?【英文标题】:HowtouseJDBCtoconnectTDenginedatabase?【发布时间】:2021-10-0617:10:23【问题描述】:不确定如何将JDBC连接器与TDengine数据库一起使用。我试图从官方文档中查找演示,但没有与“Java连接器... 查看详情

如何将标头从请求传递到集成响应?

】如何将标头从请求传递到集成响应?【英文标题】:Howtopassheaderfromrequesttointegrationresponse?【发布时间】:2021-12-1812:52:15【问题描述】:对API网关的请求将包含某些标头,例如X-header,也必须在响应中返回。因此,这些标头必须... 查看详情

java项目集成taos数据库问题(代码片段)

部署到tomcat报java.lang.NoClassDefFoundError:Couldnotinitializeclasscom.taosdata.jdbc.TSDBJNIConnector通过查github发现https://github.com/taosdata/TDengine/issues/4238https://github.com/taosdata/TDengine/issues 查看详情

如何将 Laconica 更新流集成到 SharePoint?

】如何将Laconica更新流集成到SharePoint?【英文标题】:HowcanIintegrateLaconicaupdatestreamintoSharePoint?【发布时间】:2010-09-1114:15:55【问题描述】:我在本地Intranet上配置了Laconica(自托管twitter),并希望通过Web部件将公共流集成到SharePo... 查看详情

如何将 Amazon Checkout 集成到 Spreecommerce?

】如何将AmazonCheckout集成到Spreecommerce?【英文标题】:HowcanIintegrateAmazonCheckoutintoSpreecommerce?【发布时间】:2013-10-2320:27:14【问题描述】:我们希望将AmazonCheckout整合到我们的Spreecommerce网站中。我找不到这个扩展,也是因为我对“... 查看详情

如何将 sonarqube 集成到 azure CI

】如何将sonarqube集成到azureCI【英文标题】:HowcanIintegratesonarqubetoaazureCI【发布时间】:2022-01-1313:31:13【问题描述】:我只是想知道如何将sonarqube集成到azuredevopsCI管道。另一个问题,这样做是否免费?对不起,我的英语不好【问... 查看详情

如何将 Ziggeo Sdk 集成到 Ionic App

】如何将ZiggeoSdk集成到IonicApp【英文标题】:howtointegrationZiggeoSdktoIonicApp【发布时间】:2019-04-1811:56:36【问题描述】:我想将Ziggeo的sdk集成到我的ionic应用程序中,我花了2天时间在上面,但是我无法将Ziggeo的sdk集成到我的ionic应用... 查看详情

如何将 Scala 集成到核心 Android 平台中?

】如何将Scala集成到核心Android平台中?【英文标题】:HowtointegrateScalaintocoreAndroidplatform?【发布时间】:2011-03-2613:17:54【问题描述】:我有兴趣将Scala(或其他一些非JavaJVM语言)集成到android平台中。我不是指用Scala编写一个android... 查看详情

如何将 safeAreaInsets 集成到当前约束扩展

】如何将safeAreaInsets集成到当前约束扩展【英文标题】:HowtointegratesafeAreaInsetstocurrentconstraintsextension【发布时间】:2017-09-2609:39:05【问题描述】:我为视图的约束创建了扩展。您可以在下面找到代码,但是在新发布的iPhoneX之后,... 查看详情

嵌入 ThingsBoard 仪表板

】嵌入ThingsBoard仪表板【英文标题】:EmbedsinThingsBoardDashboards【发布时间】:2019-07-1107:27:09【问题描述】:我只是想知道是否可以创建一个包含自定义HTML的Thingsboarddashbaord小部件。具体来说,是否可以使用某种自定义小部件在仪... 查看详情

如何将“聊天”集成到 ASP.NET MVC 站点中?

】如何将“聊天”集成到ASP.NETMVC站点中?【英文标题】:HowcanIintegrate"chat"intoanASP.NETMVCsite?【发布时间】:2011-02-1921:51:00【问题描述】:我想将聊天功能集成到我的网站中,并愿意接受类似该网站的解决方案,但如果存在... 查看详情

如何将 NativeScript 集成到 @nrwl/nx

】如何将NativeScript集成到@nrwl/nx【英文标题】:HowtointegrateNativeScriptinto@nrwl/nx【发布时间】:2018-08-2519:32:34【问题描述】:如何使用@nrwl/nx(NxWorkspace)在多个NativeScript应用和多个Angular应用之间共享代码?【问题讨论】:【参考方... 查看详情

thingsboard物联网关bl101介绍

ThingsBoard是一款应用广泛且开放性很好的物联网平台,广受系统集成工程师们喜欢。但是目前市面上很少物联网关支持Thingsboard物联网平台。本文介绍钡铼技术BL101系列Thingsboard物联网关,可以直接实现Modbus协议接入Thingsboa... 查看详情

如何将 UITableView 或 UITableViewController 集成到 UIPageViewController 中?

】如何将UITableView或UITableViewController集成到UIPageViewController中?【英文标题】:HowcanIintegrateanUITableVieworUITableViewControllerintoaUIPageViewController?【发布时间】:2017-03-2114:20:04【问题描述】:我想要一个UIPageViewController有几个页面,其中... 查看详情

如何将额外的火车数据集成到朴素贝叶斯?

】如何将额外的火车数据集成到朴素贝叶斯?【英文标题】:HowtoIntegrateextratraindatatoNaiveBayes?【发布时间】:2016-04-1521:18:50【问题描述】:我做了一个关于使用朴素贝叶斯库(Python)进行网络分类的示例,并且效果很好(对网页进... 查看详情