TDengine + MQTT :车联网时序数据库如何高效接入

embedded/2025/1/12 6:11:30/

现代新能源汽车,作为一种内部系统极为复杂的交通工具,配备了大量传感器、导航设备、应用软件,这些传感器产生的数据都需要上报到车联网平台当中。对于这些车辆的状态数据(如车速、发动机转速等)、位置数据(经纬度等)以及用户行为数据,车联网平台需要对它们进行实时/离线计算分析,从而为用户提升驾驶体验,提供安全保障,为厂商提供质量检测、功能优化,为交通管理部门提供流量、违章监测、甚至为城市规划提供帮助。

在车联网领域中 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 页面看到很多其他配置项,但是他们都是选填项,这部分用户可以根据实际情况填写,比如:

  1. 用户名/密码,SSL 认证。
  2. Keep Alive 和 Clean Session 为具体使用时候关于空连接释放和是否记录订阅进度的配置。
  3. 代理插件的日志级别、日志保留天数、mqtt原始数据的保留设置。

现在,我们就已经轻松完成了车辆 MQTT 数据的上传。整个过程中,唯一耗时的地方,可能就在于 MQTT 数据结构和 TDengine 的超级表结构的匹配环节。如果您对 TDengine 的“超级表-子表”的数据模型十分熟悉的话,想必不会花很多时间。


http://www.ppmy.cn/embedded/152895.html

相关文章

关于Java抽象工厂模式的面试题目及其答案

Java中有23种设计模式,主要分为三类:创建型模式、结构型模式和行为型模式‌。 创建型模式 创建型模式关注于对象的创建,提供了更灵活的对象创建方式。主要包括以下几种: ‌单例模式‌:确保一个类只有一个实例&#…

Redis 优化秒杀(异步秒杀)

目录 为什么需要异步秒杀 异步优化的核心逻辑是什么? 阻塞队列的特点是什么? Lua脚本在这里的作用是什么? 异步调用创建订单的具体逻辑是什么? 为什么要用代理对象proxy调用createVoucherOrder方法? 对于代码的详细…

大风车excel:如何题库批量导入excel?批量导入excel

高效管理试题库:如何批量导入试题到 Excel? 在教育培训、学校管理以及在线学习平台中,试题库的管理是核心工作之一。如何快速、准确地将试题导入到 Excel 表格中,成为许多教育工作者和开发者的迫切需求。本文将围绕“题库导入 Ex…

java从零开始手写redis(五)过期策略的另一种实现思路

1、不足 以前的设计非常简单,符合最基本的思路,就是将过期的信息放在一个 map 中,然后去遍历清空。 为了避免单次操作时间过长,类似 redis,单次操作 100 个元素之后,直接返回。 (1&#xff0…

简单的jmeter数据请求学习

简单的jmeter数据请求学习 1.需求 我们的流程服务由原来的workflow-server调用wfms进行了优化,将wfms服务操作并入了workflow-server中,去除了原来的webservice服务调用形式,增加了并发处理,现在想测试模拟一下,在一…

张朝阳惊现CES展,为中国品牌 “代言”的同时,或将布局搜狐新战略!

每年年初,科技圈的目光都会聚焦在美国拉斯维加斯,因为这里将上演一场被誉为 “科技春晚” 的年度大戏 ——CES 国际消费电子展。作为全球规模最大、最具影响力的科技展会之一,CES 吸引了来自 160 多个国家的创新者和行业领导者,是…

【在安卓平台上,Unity与C/C++编写的.so动态库交互的实现】

在安卓平台上,Unity与C/C++编写的.so动态库交互的实现,通常通过JNI(Java Native Interface)和P/Invoke机制来完成。通过这种方式,C#脚本可以调用C/C++代码中的函数,并与本地库进行交互。 以下是一个简单的步骤演示,展示如何在Unity中与安卓平台上的.so动态库交互。 步…

【C++】JsonCpp库

目录 前置知识 Json数据格式 JsonCpp介绍 安装jsoncpp库 头文件 使用介绍 使用示例 序列化 反序列化 前置知识 Json数据格式 Json数据格式是一种数据交换格式,采用完全独立于编程语言的文本格式存储和表示数据。 例如:表示一个学生信息 { &qu…