工业数据治理范式革新:时序数据库 TDengine虚拟表技术解析

小T导读:在工业数字化过程中,数据如何从设备采集顺利“爬坡”到上层应用,一直是个难题。传统“单列模型”虽贴合设备协议,却让上层分析举步维艰。TDengine 用一种更聪明的方法打通了这条数据通路:不强求建模、不手动转换,通过“虚拟表”机制,让数据以业务所需的形式自动呈现。本篇文章将带你深入了解 TDengine 如何搭建 OT 到 IT 的桥梁,真正实现设备数据“即采即用”,让工业应用更简单、更高效。

在工业数字化进程中,设备数据采集多采用“KVQT”单列模型(即测点名、变量值、质量戳、时间戳),这与工控传统协议紧密相关。例如,通过 OPC 设备采集时,底层设备上传的数据多为单列模型,而非多列数据模型。这种模式导致数据采集与上层应用之间存在明显割裂,业务与底层数据难以统一。在后续业务查询中,如 30 列宽表查询展示,在使用 SQL 语句场景下,操作极为复杂,需要多次 join 操作,效率低下。

为解决这一问题,TDengine 推出了一种创新的桥接方式。在工业底层数据采集汇聚到上层时,无需特殊建模,而是直接以单列模型进行采集和存储。待数据到达上层应用后,根据业务需求重新创建虚拟表。通过 IO 点表,使用 SQL 语句,可批量创建虚拟子表,从而大幅降低数据采集、建模处理和查询分析的工作量。

工业数据结构演变的挑战

工业控制系统基于国际标准 IEC 62264-1,采用五层架构模型,用于描述工业自动化系统的功能分层。从底层设备通道 IO 采集,到 MES 系统的多列模型,再到 ERP 系统的多列表格展示,数据组织需求随着层级上升而发生变化。

在 I/O 设备层,数据组织基于模拟信号通道,通过传感器,感知温度、压力等被观测量,并转成模拟信号(4~20mA或0-5V),传输至过程监控层的 PLC、DCS 系统。在这些系统中,通过 A/D 转换将模拟信号转换为计算机可识别的数字信号。此时,数据组织仍以 IO 通道为基础。

为了实现调度中心的远程监视与控制,SCADA 系统会采集控制器信号,并与计算机中的图形应用绑定,通过数字驱动动画实现现场仿真。SCADA 系统内部已经封装了与测点变量相关的功能模块,如报表、曲线等,可轻松实现日报、月报、对比曲线展示等功能。部分 SCADA 系统也引入了模型概念,但在对外数据转发时,仍以单列模型为主。

进入生产管理层的 MES/MOM 系统后,数据需求转变为宽表多列模型,需要将工单、批次、工艺信息等进行绑定。然而,由于实时库多为单列模型,而 MES 系统建设通常需要多列模型表格,因此只能选择关系数据库。海量的历史数据则从实时库抽取。为解决多库应用不便的问题,许多 MES 厂商引入了支持宽表的时序数据库,但这又面临采集与转换的难题:如何将从 OT 层的 SCADA、控制器或设备采集的单列数据模型存储为 IT 层 MES 系统所需的多列模型?目前的解决方案多为定制开发,将单列数据映射到预定的多列模型表格中,但这带来了高昂的定制开发成本、后期业务变更成本和维护成本,同时也存在数据断线、过期和乱序数据写入导致的数据完整性问题。

在生产车间中,同一条生产线往往需要生产不同产品和批次,并且需要记录温度、电压、电流等数十个工艺参数。这些参数需要与产品类型、批次进行绑定,以便为后续的质量追溯和工艺分析提供数据基础。然而,在传统方法中,操作人员需要通过关系库查询批次起始时间,从实时库的测点变量中获取数据。这种操作方式不仅复杂,而且后期管理难度较大。如果工厂拥有几万甚至几十万个测点,一旦设计不当,后期的应用和运维难度将呈指数级上升。

对于上层业务而言,底层设备的变动不应与其绑定。以矿山场景为例,当采矿的工作面发生变更时,下位采集点位可能并未发生变化,只是工作面标识发生了改变。如果按照传统方式,为一个新的工作面重新建表,未来可能会导致数据库中出现上亿张点位表,这将对数据库以及上层业务应用带来沉重负担。随着数据库点位的扩增,上层应用需要重新映射点位,这一连串的工作不仅会增加工作强度,还容易出现问题,同时也会给历史数据查询带来极大不便。

OT 到 IT 的桥梁——虚拟表

TDengine 提出“虚拟表”这一创新概念,可自由组合不同测点变量,生成所需的表格式,无需为建模和业务应用过度操心。

具体而言,通过工控协议采集设备数据后,无需提前规划表模型(因为大部分 IoT 数据并无统一的数据组织结构)。数据进入 TDengine 后,可根据业务需求,基于实体表创建虚拟表。虚拟表与物化表在除写入以外的应用场景中几乎没有区别,且在便利性和系统扩展性方面远超传统视图功能。

通过可视化配置,TDengine 能够直接将设备数据采集到数据库中。以 OPC 采集为例,TDengine 的 OPC 采集器具备自动点位更新功能,当 OPC Server 端的点位发生变化且满足 TDengine 的过滤条件时,TDengine 可自动同步更新,无需人工手动干预,从而大幅降低运维沟通成本。对于 OPC DA 协议,由于其自身限制,OPC DA 协议数据无法跨路由器或 VLAN 进行通信,且跨计算机部署时需要降低安全配置并手动配置 DCOM,操作复杂且容易出错。相比之下,TDengine 支持 Agent 部署,可实现远程运维管理,基本不受网络环境限制(单向网闸场景除外),极大地简化了运维流程。此外,TDengine Agent 支持断线续传功能,进一步保障 OPC 数据的完整性和可靠性。

以下是 OPC 自动采集数据的示例:

...

当上位应用需查询不同产品的批次信息及对应工艺参数时,需求是明确的,以上述 3 个测点为例,在 TDengine的操作如下:

1.创建虚拟表:

//创建普通表或者超级表,此处以普通表为例
create vtable d1(ts timestamp,batchNo.val,Temp.val,Current.val) 

//支持创建时以别名方式,将底层采集数据与上位应用结构相互解耦
create vtable d1(ts timestamp,batchNo varchar(64)from batchNo.val,Temp float from Temp.val,Current float from Current.val) 

2.查询虚拟表并拉齐数据:

select last(*) from d1 interval(1s)fill(prev)

查询结果如下:

3.查询虚拟表原始数据:

Select * from d1

其中时间戳为各原始子表时间戳的汇总,查询结果:

TDengine 通过简单创建虚拟表和 SQL 语句,轻松实现了不同测点之间的关系查询。与传统方式相比,TDengine 无需通过视图构建复杂的JOIN语句,也无需提前设计数据模型,从而避免了前期数据接入和转换的繁琐流程,以及后期修改和维护的不便。借助虚拟表,TDengine 让数据组织变得更加简洁、灵活,为上层业务应用分析提供了强大的数据支持,同时显著提升了运维的便捷性和效率。

结语

凭借卓越的性能和强大的功能,TDengine成功搭建了 OT 与 IT 场景之间的高效过渡桥梁。未来,业务应用将不再受制于 OT 数据与 IT 业务数据格式的差异,数据整合与应用将更加顺畅。随着业务规模的不断扩大,TDengine 的易用性优势将愈发显著,为企业数字化转型筑牢坚实的数据根基,助力企业迈向智能化、高效化的未来发展之路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/901844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis面试——日志

一、RDB(Redis DataBase) RDB 全程是 Redis DataBase,它是一种将 Redis 在某一时刻内存中的数据以快照形式保存到磁盘的机制 ,相当于给执行save/bgsave命令时刻的内存数据库数据拍了一张快照我们如果通过save命令来执行快照&…

【Android】常用参数实践 用户界面UI 布局文件XML

本文将系统总结 Android XML 布局的通用参数和常用布局类型的专属规则 一、通用布局参数 这些参数适用于所有 View 和 ViewGroup,是布局设计的基石。 1. 尺寸控制 android:layout_width 与 android:layout_height 定义视图的宽度和高度,可选值&#xf…

解决 VSCode 中 NVM 配置后无法识别 Node 和 NPM 的问题

在开发中,我们经常需要使用 Node.js 和 NPM 来管理 JavaScript 项目依赖,而 NVM(Node Version Manager)是开发者在本地环境中管理多个 Node.js 版本的得力工具。不过,有时候在 VSCode 中配置完 NVM 后,可能…

BGP分解实验·23——BGP选路原则之路由器标识

在选路原则需要用到Router-ID做选路决策时,其对等体Router-ID较小的路由将被优选;其中,当路由被反射时,包含起源器ID属性时,该属性将代替router-id做比较。 实验拓扑如下: 实验通过调整路由器R1和R2的rout…

Linux: 线程同步

目录 一 前言 二 线程饥饿 三 线程同步 四 条件变量 1. cond ( condition) 2. pthread_cond_wait() : 3. pthread_cond_signal() 五 条件变量的使用 一 前言 在上篇文章Linux : 多线程互斥-CSDN博客我们讲解了线程互斥的概念&#xff…

MyBatisPlus-QueryWrapper的exists方法拼接SQL中的EXISTS子句

在 MyBatis-Plus 中,QueryWrapper 的 exists 方法用于拼接 SQL 中的 EXISTS 子句,通常用于构 建子查询条件。以下是具体用法和示例: ​​1. 基本语法​​ // 判断是否存在符合条件的记录 queryWrapper.exists(String existsSql); queryWrapper.notExists(String existsSq…

[数据结构]哈希表

目录 1、哈希表 1.1、概念 1.2、冲突 2、哈希函数设计 3、负载因子调节 4、闭散列 5、开散列/哈希桶(重点掌握) 6、实现哈希桶 6.1、put方法 6.2、HashMap的扩容机制 6.3、get方法 7、HashMap 8、HashSet 8.1、哈希表性能分析 9、hashcod…

VS-Code创建Vue3项目

1 创建工程文件 创建一个做工程项目的文件夹 如:h5vue 2 cmd 进入文件 h5vue 3 输入如下命令 npm create vuelatest 也可以输入 npm create vitelatest 4 输入项目名称 项目名称:自已输入 回车 可以按键盘 a (全选) 回车: Playwright…

linux休眠唤醒流程

1、框架 2、休眠流程 应用层通过echo mem > /sys/power/state写入休眠状态,给一张大概流程图 这个操作对应在kernel/power/main.c的state这个attr的store操作 static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr, …

Mysql--基础知识点--93--两阶段提交

1 两阶段提交 以update语句的具体执行过程为例: 具体更新一条记录 UPDATE t_user SET name ‘xiaolin’ WHERE id 1;的流程如下: 1.执行器负责具体执行,会调用存储引擎的接口,通过主键索引树搜索获取 id 1 这一行记录&#…

Windows 环境下 Apache 配置 WebSocket 支持

目录 前言1. 基本知识2. 实战前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 原先写过apache的http配置:Apache httpd-vhosts.conf 配置详解(附Demo) 1. 基本知识 🔁 WebSocket 是 HTTP 的升级协议 客户…

UMAEA论文阅读

Preliminaries MMKG为一个五元组G{E, R, A, V, T},其中E、R、A和V分别表示实体集、关系集、属性集和图像集。 T⊆ERE是关系三元组集。 给定两个MMKG G1 {E1, R1, A1, V1, T1} 和 G2 {E2, R2, A2, V2, T2}, MMEA旨在识别每个实体对(e1…

AIGC-十款知识付费类智能体完整指令直接用(DeepSeek,豆包,千问,Kimi,GPT)

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列AIGC(GPT、DeepSeek、豆包、千问、Kimi)👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资…

Qt界面卡住变慢的解决方法

本质原因: 当Qt界面出现卡顿或无响应时,通常是因为主线程(GUI线程)被耗时操作阻塞。 完全忘了。。。 Qt Creater解决方法 1. 定位耗时操作 目标:找到阻塞主线程的代码段。 方法: 使用QElapsedTimer测量代码执行时间…

【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini,Spring Boot整合实战!| 附源码

【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini,Spring Boot整合实战! 前言:当Java遇上大模型 在AI浪潮席卷全球的今天,Java开发者如何快速拥抱大语言模型?LangChain4j作为专为Java打造的AI开发框架&#xff0c…

Vue 3 reactive 和 ref 区别及 失去响应性问题

在 Vue 3 中,reactive 和 ref 是实现响应式数据的两个核心 API,它们的设计目标和使用场景有所不同。以下是两者的详细对比: 1. 基本定义与核心功能 特性reactiveref作用创建对象类型的响应式代理(对象、数组、Map 等&#xff09…

第一节:Vben Admin 最新 v5.0初体验

系列文章目录 基础篇 第一节:Vben Admin介绍和初次运行 第二节:Vben Admin 登录逻辑梳理和对接后端准备 第三节:Vben Admin登录对接后端login接口 第四节:Vben Admin登录对接后端getUserInfo接口 第五节:Vben Admin权…

Nginx部署spa单页面的小bug

没部署过,都是给后端干的,自己尝试部署了一个下午终于成功了 我遇到的最大的bug是进入后只有首页正常显示 其他页面全是404,于是问问问才知道,需要这个 location / { try_files $uri $uri/ /index.html; } 让…

面试算法高频08-动态规划-01

动态规划 递归知识要点 递归代码模板:提供递归代码的标准形式public void recur(int level, int param) ,包含终止条件(if (level> MAX_LEVEL))、当前层逻辑处理(process(level, param))、向下一层递归…

若依框架前后端分离版部署全流程详解(本地+服务器+高级配置)

若依框架前后端分离版部署全流程详解(本地服务器高级配置) 若依(RuoYi)作为一款基于SpringBoot和Vue的权限管理系统,凭借其模块化设计和开箱即用的特性广受开发者欢迎。本文将从本地部署、服务器部署、高级配置三个维…