TDengine + MQTT :车联网时序数据库如何高效接入
现代新能源汽车,作为一种内部系统极为复杂的交通工具,配备了大量传感器、导航设备、应用软件,这些传感器产生的数据都需要上报到车联网平台当中。对于这些车辆的状态数据(如车速、发动机转速等)、位置数据(经纬度等)以及用户行为数据,车联网平台需要对它们进行实时/离线计算分析,从而为用户提升驾驶体验,提供安全保障,为厂商提供质量检测、功能优化,为交通管理部门提供流量、违章监测、甚至为城市规划提供帮助。
在车联网领域中 MQTT 是十分常见的协议,它所具备的:能够适应不稳定的网络环境、轻量级、低延迟等特点,使其非常适合车辆数据的上报,也是目前主流的车联网边端-云端数据交互的通讯协议。
而 TDengine 是一款从诞生之初便致力于为工业、物联网领域推动信息化改革的时序大数据平台。而车联网作为物联网的重要分支,自然也是 TDengine 主攻的领域之一。因此,在 TDengine Enterprise/TDengine Cloud 的外部数据源接入组件中,我们提供了诸如:MQTT、OPC-UA、OPC-DA 等数据直采的功能。让用户可以凭借十分简单的 Web 界面配置,无需任何一行代码,便完成车联网的位置、车辆状态、用户行为等数据的接入。
我们可以想象出这样一个场景:
通过 TDengine 的 web 界面工具,订阅 MQTT 的 “GPS” topic 们获取全部车辆的 GPS 数据,然后把“GPS” topic 和 TDengine 中创建出来的“超级表 GPS”对应起来,再把 MQTT 数据中的“车牌号”, “车型”,“汽车品牌”同 TDengine “GPS” 超级表中不同的标签映射起来。最终, MQTT 数据就可以源源不断地接入TDengine 当中了。
TDengine 的数据采集插件就像是一个翻译官,它能理解 MQTT 数据结构映射到时序库数据结构的需求,最终把他们巧妙地结合在一起。
那么,使用 TDengine 采集车联网上报的 MQTT 数据到底有多简单?
抽象一下,只需要如下步骤:
1. 对于非 TDengine Enterprise(企业版)用户,花 3 分钟时间注册 TDengine Cloud ,https://cloud.taosdata.com/auth/login,根据提示兑换 600 元额度的免费使用。
2. 在TDengine 中提前创建好一个数据库,用于存放MQTT数据。(具体建库参数值如需自定义,可参阅:数据库 | TDengine 文档 | 涛思数据)

3. 确保代理插件和 MQTT server 处在同一网络,然后根据提示,逐步复制粘贴,安装代理插件并启动。


4. 新增数据源。

5. 按顺序填写/选择:自定义的任务名称;MQTT 类型;选择刚刚创建的代理插件;填写MQTT server 的 IP 和端口。 PS:这里可以用一个免费的 MQTT server 做验证(broker.emqx.io:1883)。

6. 填写 MQTT 协议版本、自定义的Client ID、和需要订阅的主题(topic)以及该订阅的 QOS (Quality of Service 服务质量)级别,QOS 可选范围为0、1、2,具体写法参考示例即可。(用户名密码为选填项。)

7. 解析数据,在MQTT Payload 模块中配置解析 MQTT 消息:
可以点击从服务器检索,从 MQTT Broker 获得示例数据。也可以自己填写 MQTT 消息体中的示例数据,例如:{“id”: 1, “message”: “hello-word”}{“id”: 2, “message”: “hello-word”}。

8. 获得数据之后,可以选择自定义的方式依次去处理这个json:
- 提取出列。
- 对提取出的列数据,通过分隔符、正则表达式等进行提取或拆分:比如把“中国-北京”拆分成“中国”和“北京” 两列。
- 对最终的结果进行过滤:比如只取车速大于 xxx 的数据。

9. 创建一个超级表,用于存储MQTT数据。然后把刚刚处理过的 MQTT 数据结构和 TDengine 的超级表做一个映射关系:这里我们可以使用各种灵活的方式处理映射关系。比如设置时间戳自动生成、固定制、默认值、以及最基本的匹配。

10. 填写完成以上信息后,下拉到底部点击“保存并应用”按钮,即可直接启动从 MQTT 到 TDengine 的数据同步了。

11.在这里看到连接代理和数据源任务都处于正常状态之后,就可以去TDengine 中使用 SQL 语句检查我们的 MQTT 数据了。


现在,我们已经看到MQTT server 的数据正在源源不断地写入 TDengine 了。
在这个配置过程中,我们还能在 WEB 页面看到很多其他配置项,但是他们都是选填项,这部分用户可以根据实际情况填写,比如:
- 用户名/密码,SSL 认证。
- Keep Alive 和 Clean Session 为具体使用时候关于空连接释放和是否记录订阅进度的配置。
- 代理插件的日志级别、日志保留天数、mqtt原始数据的保留设置。
现在,我们就已经轻松完成了车辆 MQTT 数据的上传。整个过程中,唯一耗时的地方,可能就在于 MQTT 数据结构和 TDengine 的超级表结构的匹配环节。如果您对 TDengine 的“超级表-子表”的数据模型十分熟悉的话,想必不会花很多时间。
相关文章:
TDengine + MQTT :车联网时序数据库如何高效接入
现代新能源汽车,作为一种内部系统极为复杂的交通工具,配备了大量传感器、导航设备、应用软件,这些传感器产生的数据都需要上报到车联网平台当中。对于这些车辆的状态数据(如车速、发动机转速等)、位置数据(…...
maven的中国镜像有哪些
根据您的请求,以下是一些可用的 Maven 中国镜像: 阿里云 官网:阿里云 Maven 镜像配置:<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>…...
ModelScope ms-swift:轻量级模型微调框架
ModelScope ms-swift:轻量级模型微调框架 介绍支持的模型支持的技术使用方法为什么选择ms-swift?结论 介绍 ModelScope ms-swift是ModelScope社区提供的一个官方框架,用于大型语言模型(LLMs)和多模态大型模型…...
深度解析与实践:HTTP 协议
一、引言 HTTP(HyperText Transfer Protocol,超文本传输协议)是 Web 应用程序、API、微服务以及几乎所有互联网通信的核心协议。虽然它是我们日常使用的基础技术,但要深刻理解其高效使用、优化以及如何避免性能瓶颈,我…...
Zookeeper是如何解决脑裂问题的?
大家好,我是锋哥。今天分享关于【Zookeeper是如何解决脑裂问题的?】面试题。希望对大家有帮助; Zookeeper是如何解决脑裂问题的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 通过一系列的机制来防止和解决脑裂(sp…...
《Opencv》基础操作详解(5)
接上篇:《Opencv》基础操作详解(4)-CSDN博客 目录 接上篇:《Opencv》基础操作详解(4)-CSDN博客 25、轮廓近似 简介 接口用法 参数说明 返回值 代码示例 结果展示 26、轮廓最小外接圆 简介 接口用…...
AI大模型-提示工程学习笔记2
卷首语:我所知的是我自己非常无知,所以我要不断学习。 写给AI入行比较晚的小白们(比如我自己)看的,大神可以直接路过无视了。 提示词要素 提示词由以下几个要素组成: 指令:告诉模型需要完成什…...
AWS ELB基础知识
1.负载均衡器的类型 需要了解三种类型的 ELB: Application Load Balancer (ALB) **: 在 HTTP/HTTPS 层(OSI 模型的第 7 层)运行。非常适合路由 HTTP/HTTPS 流量。支持高级路由功能,例如基于 U…...
我用Ai学Android Jetpack Compose之Text
这篇开始学习各种UI元素,答案来自 通义千问,通义千问没法生成图片,图片是我补充的。 下述代码只要复制到第一个工程,做一些import操作,一般import androidx.compose包里的东西,即可看到预览效果。完整工程代…...
Robot---奇思妙想轮足机器人
1 背景 传统机器人有足式、轮式、履带式三种移动方式,每种移动方式都有各自的优缺点。轮式机器人依靠车轮在地面上移动,能源利用率高、移动速度快,但是仅以轮子与地面接触,缺乏越障能力和对复杂地形的适应能力,尤其面对…...
springcloud 介绍
Spring Cloud是一个基于Spring Boot的微服务架构解决方案集合,它提供了一套完整的工具集,用于快速构建分布式系统。在Spring Cloud的架构中,服务被拆分为一系列小型、自治的微服务,每个服务运行在其独立的进程中,并通过…...
【STM32】I2C为什么要开漏输出和上拉电阻
为什么需要使用开漏输出 防止短路:假设使用推挽结构,多个设备挂在同一总线上,当存在某一设备将某一信号驱动为高电平,而其他设备驱动为低电平,会导致短路,导致器件损坏或降低寿命。对于开漏结构࿰…...
【从零开始入门unity游戏开发之——C#篇44】C#补充知识——var隐式类型、初始化器、匿名类型
文章目录 一、var隐式类型1、var 的基本用法2、注意3、总结 二、初始化器1、类定义2、对象初始化器3、集合初始化3.1 数组初始化3.2 List<T> 初始化3.3 Dictionary<TKey, TValue> 初始化 三、匿名类型1、示例代码2、匿名类型的限制: 专栏推荐完结 一、v…...
Spring Boot 中 TypeExcludeFilter 的作用及使用示例
在Spring Boot应用程序中,TypeExcludeFilter 是一个用于过滤特定类型的组件,使之不被Spring容器自动扫描和注册为bean的工具。这在你想要排除某些类或类型(如配置类、组件等)而不希望它们参与Spring的自动装配时非常有用。 作用 …...
解锁kafka组件安全性解决方案:打造全方位安全防线
文章目录 前言安全漏洞修复权限管理身份验证数据传输数据存储 前言 Kafka组件的安全性解决方案旨在保护Kafka集群免受未经授权访问、数据泄露、知识产权问题和竞争法问题的侵害。提高开源中间件的安全性和稳定性,包括安全漏洞修复、权限管理、身份验证等方面的内容…...
【C++数据结构——图】最小生成树(头歌实践教学平台习题) 【合集】
目录😋 任务描述 相关知识 带权无向图 建立邻接矩阵 Prim算法 1. 算法基本概念 2. 算法背景与目标 3. 算法具体步骤 4. 算法结束条件与结果 测试说明 通关代码 测试结果 任务描述 本关任务:编写一个程序求图的最小生成树。 相关知识 为了完成…...
Java(1)入门基础
1. Java简介 1.1 什么是Java Java 是一款由Sun Microsystems公司(现为甲骨文公司Oracle Corporation的一部分)的James Gosling及其团队在1995年发布的高级编程语言。同时,Java 是一种面向对象的语言,这意味着它允许开发者通过创…...
2024.1.5总结
今日不开心:这周本来想花点时间学习的,没想到全都花在刷视频,外出消费去了。 今日思考: 1.找对象这件事确实不能强求,顺其自然吧,单身和不单身,其实,各有各的利弊。在一次坐地铁的过程中,我一…...
【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 一、循环控制 / 跳转语句的使用 1. 循环控制语句(for 循环) 2. 循环控制语句(while 循环) 3. 跳转语句(break 语句) 4. 跳转语句(continue 语句&…...
在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法
在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法 1. GrpcChannel 的概念 GrpcChannel 是 gRPC 客户端与服务器之间通信的核心组件。它是基于 HTTP/2 的连接,支持多路复用,即通过单个通道可以发送多…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...
