TDengine 3.3.7.0 版本全解析:流计算重构、BLOB 新类型与数据挂载能力落地
2026/9/22 11:12:12 网站建设 项目流程
  • 数据库
  • 时序数据库
  • 物联网
  • 大数据
  • 实时分析
  • 云原生

【免费下载链接】tdengine

TDengine is an open source, high-performance, cloud native time-series database optimized for Internet of Things (IoT), Connected Cars, Industrial IoT and DevOps.

项目地址:https://gitcode.com/taosdata/tdengine
点击查看免费下载

TDengine 于 2025-07-29 正式发布3.3.7.0版本。本版本是 3.3 系列的一个重要里程碑:流计算引擎全新发布、新增 BLOB 二进制数据类型、多级存储支持共享存储、数据订阅接入 MQTT 协议,并引入数据挂载(MOUNT)能力,同时覆盖 29 项特性、23 项优化与 47 项修复。本文以官方版本说明为主线,结合当前仓库源码与配套文档,逐一解读这些能力的用法、原理与落地细节,帮助读者评估升级收益并快速上手新特性。

一、核心新特性:流计算全新发布与计数窗口指定列

1.1 流计算引擎重构

3.3.7.0 中"流计算全新发布"是最受关注的变更之一。它意味着流式处理模块在语法、执行与可观测性上经历了系统性重构。从仓库文档看,流计算的完整语法体系位于 docs/zh/07-stream-processing/01-syntax.md,其触发类型已形成完整矩阵:

  • 时间窗口触发INTERVAL按固定时间长度划分窗口;
  • 滑动触发SLIDING指定窗口滑动步长;
  • 定时触发PERIOD周期触发;
  • 会话窗口触发SESSION按时间间隔合并连续事件;
  • 状态窗口触发事件窗口触发计数窗口触发

其中状态窗口、事件窗口和计数窗口在搭配超级表使用时,必须与PARTITION BY tbname一起使用。这一约束在新版流计算中依然保留,说明窗口语义与分区语义的耦合关系是设计上的一贯约定。

1.2 计数窗口支持指定触发列

版本说明中"计数窗口中允许指定列"补齐了计数窗口的实用场景。计数窗口触发是指对触发表的写入数据按照计数方式进行窗口划分,在窗口启动和(或)关闭时触发。新版本支持列的触发:只有当指定列有数据写入时才触发窗口,避免无关字段的写入频繁触发计算。

计数窗口的细节约束在 docs/zh/07-stream-processing/01-syntax.md 中有明确说明:

  • 计数窗口开始时发送起始时间;结束时发送起始时间、结束时间与计算结果;
  • 滑动步长为 1 的计数窗口(例如COUNT_WINDOW(1)COUNT_WINDOW(n, 1))默认处理乱序数据(通过重算),也可通过STREAM_OPTIONS(IGNORE_DISORDER)显式忽略;
  • 滑动步长不为 1 的计数窗口一律忽略乱序数据与更新;
  • 仅滑动步长为 1 的计数窗口支持DELETE_RECALC选项,可在触发表数据删除时自动重算;
  • 计数窗口触发的手动重算必须同时指定开始时间与结束时间,且只适用于流进度已完成部分的时间区间(见 docs/zh/07-stream-processing/02-instructions.md)。

因此,"允许指定列"这一特性让计数窗口在 IoT 场景下可以锚定具体测点(如某个传感器字段)作为触发信号,显著降低无效写入带来的计算开销。

二、新增 BLOB 数据类型及全链路连接器支持

2.1 类型定义与底层实现

3.3.7.0 新增BLOB(Binary Large Object)类型,用于存储二进制大对象。从仓库头文件可以看到类型常量的正式定义:

  • TSDB_DATA_TYPE_BLOB = 18(见 include/client/taos.h);
  • TSDB_DATA_TYPE_MEDIUMBLOB = 19(见 include/client/taos.h)。

同时,公共类型工具中已为 BLOB 系列提供判定宏IS_STR_DATA_BLOB(t),覆盖 BLOB 与 MEDIUMBLOB 两类(见 include/common/ttypes.h)。这说明 BLOB 不是孤立的单类型,而是与 MEDIUMBLOB 一起构成了完整的二进制数据家族,底层按字符串类数据进行存取与传输。

2.2 各连接器同步支持

为让 BLOB 能力真正可用,本版本实现了全链路打通:

  • Go 连接器Rust 连接器C WebSocket 连接器支持 BLOB 类型;
  • Python WebSocket 连接器C# 连接器支持 BLOB;
  • taosAdapter支持 BLOB 类型,使 REST 等接入路径可读写二进制数据;
  • taosX同步链路支持 Varbinary 类型,并支持所有数据源以 Decimal 类型写入。

各语言连接器参考文档位于 docs/zh/10-developer-guide/08-connectors-reference/(如 Java、Go、Python 等)。数据类型总览见 docs/zh/05-tdengine-sql/01-datatype.md。

2.3 配套修复

BLOB 相关能力并非一次到位,本版本还修复了若干二进制/高精度数据问题:

  • taosXCSV 写入 Decimal 类型导致的 panic;
  • taosX同步 Decimal 数据转换为 Double 类型写入错误;
  • 纳秒精度数据库使用to_char函数结果错误;
  • timediff函数的时间精度问题。

这些修复共同保证了新类型在写入、同步、计算链路上的正确性。

三、存储与数据管理:共享存储、数据挂载与 WAL 自动修复

3.1 多级存储支持采用共享存储

3.3.7.0 允许多级存储的各级挂载点使用共享存储(如网络文件系统或分布式文件系统),使存储容量规划从本地磁盘扩展到共享存储池。多级存储的核心配置仍集中在每个 vnode 目录下的local.json中,主挂载点与次级挂载点的路径配置方式不变,只是底层介质可以替换为共享存储。

3.2 数据挂载(MOUNT):只读接入源集群数据

数据挂载是企业版自v3.3.7.0起提供的能力,官方文档见 docs/zh/05-tdengine-sql/08-cluster-management/03-mount.md。其核心思想是:在宿主集群中通过 SQL 将源集群(飞行器、车载/边缘设备、同机房或其他数据中心的集群、历史备份数据等)的数据目录只读挂载到宿主集群,无需数据迁移即可直接查询。

创建挂载

CREATE MOUNT [IF NOT EXISTS] mountName ON DNODE dnodeId FROM TDenginePath;

参数说明:

  • mountName:挂载名称,不能包含下划线_;挂载后的数据库名为mountName_<dbname>
  • dnodeId:源集群数据目录所在宿主集群的dnode标识;
  • TDenginePath:源集群数据目录的绝对路径,需用英文单引号或双引号括起。

示例:在宿主集群dnode1 上,将源集群目录/var/lib/taos_1mount1为名称挂载:

CREATE MOUNT mount1 ON DNODE 1 FROM '/var/lib/taos_1';

挂载后即可通过mount1_<dbname>访问源集群数据库。

查看挂载

SHOW MOUNTS;

示例输出:

name | dnode | create_time | path | ============================================================== mount1 | 1 | 2025-07-17 18:06:16.298 | /var/lib/taos_1 |

字段含义:name为挂载名称,dnode为宿主集群中执行挂载的节点,create_time为挂载创建时间,path为源集群数据目录绝对路径。仅拥有系统信息查看权限的用户可以查看。

删除挂载

DROP MOUNT [IF EXISTS] mountName;

删除挂载会清空宿主集群中与该挂载相关的元数据,并恢复源集群数据目录的配置信息,但不会删除源集群的实际数据文件

使用限制(重点)

  • 同一宿主集群中mountName不能重复,也不能与宿主集群已有数据库重名;
  • mountNameTDenginePath一一对应;
  • 目前仅支持在单个dnode上挂载;若源集群使用多级存储,需手工调整local.json中非主挂载点路径;
  • 同一源集群同一时刻只能被一个宿主集群挂载;宿主集群不能挂载自身数据目录;
  • 挂载时暂不支持源集群多副本、加密数据库,以及源集群无数据库的情况;
  • 宿主集群对挂载库仅支持时序数据查询,不支持写入与元数据更新;不支持虚拟表时序数据查询(支持元数据查询);不支持流式计算、订阅、视图等功能;不支持COMPACT/TRIM/REDISTRIBUTE/SPLIT/RESTORE等管理操作;
  • 仅超级管理员拥有操作权限。

典型应用场景

  • 设备数据地面分析:源集群采集数据无需导出迁移,挂载到分析集群后直接查询;
  • 跨集群数据比对:将多个业务集群挂载到统一分析集群,对比同源数据;
  • 历史数据查询:将离线历史数据集群挂载到在线业务集群,无需回迁即可查询;
  • 数据备份验证:将备份存储集群挂载到验证集群,直接校验备份数据完整性。

实现上,数据挂载通过元数据映射建立访问通道,源数据文件不复制到宿主集群,仅在宿主集群记录挂载关联信息,因此具备快速访问、轻量实现、实时查询与只读安全保障等特征。本版本还修复了"多级存储变更单个挂载点后无法启动"与"多副本数据库的单个挂载点失效后无法恢复"两个问题,进一步增强了挂载与多级存储的稳定性。

3.3 新增 WALForceRepair 参数自动修复 WAL

针对 WAL 文件损坏场景,3.3.7.0 新增配置项walForceRepair。从源码看,该参数为布尔型服务端配置,定义于 source/common/src/tglobal.c,注册为服务器级配置(CFG_SCOPE_SERVERCFG_CATEGORY_LOCALCFG_PRIV_SYSTEM,见同文件 tglobal.c)。

其作用体现在 WAL 元数据修复流程中:正常修复仅截断可恢复的尾部文件,而当tsWalForceRepair为真时,允许对最后一个文件执行更激进的强制修复(见 source/libs/wal/src/walMeta.c),启动时自动检测并修复 WAL 文件的损坏情况,降低因 WAL 异常导致节点无法启动的概率。

四、数据订阅与接入:MQTT 协议与 taosX 增强

4.1 数据订阅支持 MQTT 协议

3.3.7.0 让 TDengine 的数据订阅能力新增 MQTT 协议出口:客户端可以通过 MQTT 订阅 TDengine 的写入/变更数据。需要特别区分两个概念(参见 docs/zh/08-data-ingest-and-delivery/01-no-code-ingestion/07-mqtt.md):

  • taosX MQTT 接入:从外部 MQTT Broker 订阅数据并写入 TDengine(数据流入),订阅主题的 QoS 可为 0、1、2(由 Broker 侧能力决定);
  • 数据订阅 MQTT:客户端连接 TDengine Bnode,通过 MQTT 协议消费订阅数据,仅支持 QoS 0/1。

配套能力包括:taosX支持订阅 TDengine 发送给 MQTT、支持 MQTT Sparkplug B、支持按数据库精度生成不重复的时间戳,并修复了"订阅数据库主题时的内存泄漏""删除主题会影响到其他消费者的订阅"等问题,保证订阅链路在并发场景下的可靠性。

4.2 数据接入与同步的其他增强

  • taosX 所有数据源支持 Decimal 类型写入,并修复 CSV/Decimal 相关错误;
  • taosX 实现更多时间格式过滤、支持 Varbinary 类型、OPC CSV 配置文件添加含模板变量的标签;
  • taosX Transform 插件发版,本地文件恢复添加watch参数控制是否监听目录;
  • taosX 支持 adapter 自签名证书加密,提升传输安全性。

五、连接器生态:重连、Failover、IPv6 与版本匹配检测

5.1 WebSocket / libtaosws 增强

  • Rust websocket / libtaosws 连接器支持自动重连
  • libtaosws 支持adapterList配置项进行错误重试,可在多个 adapter 之间切换;
  • C WebSocket 连接器支持重连和故障节点 Failover,并支持双活连接ws/wss 自动切换
  • Python WebSocket 连接支持自动重连
  • C# 增加多 DotNet 版本测试,保证跨运行时一致性;
  • 修复了libtaosws fetch_rows_a获取多个 Block 结果错误、WebSocket 连接上设置时区与 JVM 默认时区相同时不生效等问题。

5.2 IPv6 与网络地址支持

  • Go WebSocket 连接支持 IPv6
  • C# WebSocket 连接支持 IPv6
  • 修复了 Windows 下本机带域名的 IPv6 解析错误、taos -h输入 IPv6 地址报错等问题。

5.3 版本匹配检测与 C 连接器

新增版本匹配检测机制,用于在客户端与服务端版本不兼容时提前告警,降低因版本漂移引发的协议兼容问题。C 连接器层面,修复了 STMT2 对新增列操作时客户端崩溃、fetch_rows_a多 Block 结果错误等问题。

六、SQL 与查询能力增强

6.1 支持将查询结果写入超级表

3.3.7.0 支持将查询结果直接写入超级表,简化了 ETL 与数据重排流程,配合"子表名 Transform 支持表达式计算",可在写入时动态生成子表名。

6.2 虚拟表相关修复

  • 修复虚拟表写入请求未报告错误的问题;
  • 支持在虚拟表上显示标签;
  • 修复 BI 模式下虚拟表查询失败的问题。

虚拟表相关语法可参考 docs/zh/05-tdengine-sql/02-ddl/04-virtualtable.md。

6.3 其他查询修复

  • 修复smallint类型在使用in ('1')条件过滤时无法返回查询结果;
  • 修复对double类型字段排序时可能导致程序崩溃;
  • 修复Nchar类型标签索引未生效;
  • 修复forecast参数字符串长度超过 512 时报错;
  • 修复读取内存和 STT 中复合主键数据时可能生成重复 ID 的问题;
  • 修复执行show db.disk_info可能导致崩溃的问题;
  • 修复timediff时间精度、纳秒精度数据库to_char结果错误等。

七、系统与安全优化

  • 新增存储容量、Vnode 数目等授权项,使授权粒度更精细;
  • 支持采用 SM4 算法加密用户密码,增强安全存储能力;
  • 新增 OpenMetrics 采集,便于接入 Prometheus 生态进行监控;
  • 新增 Ontop 知识图谱系统集成,扩展了时序数据在知识图谱场景的可用性;
  • 优化:减少 INFO 级别日志输出、支持更多写入性能监控指标,降低日志噪声、提升可观测性;
  • 优化:WebSocket Poll 优化,提升轮询场景吞吐;
  • 修复:Agent 偶发线程中断在 IPC ACK 构建过程中、sysinfo 0.33.1 导致麒麟 V10 系统 slab 内存持续增长等稳定性问题。

八、工具链与生态:taosBenchmark、taosdump 与客户端

  • taosBenchmark 重构功能性能增强:taosgen,支持从 CSV 文件读入子表名、标签值创建子表,输出结构化统计数据,修复 REST 不支持绑定 vgroup、未设置 check sql 连接数翻倍等问题;
  • taosX相关优化与修复如上文所述;
  • flink 连接器 sink 增加数据转换异常信息输出,便于排查同步失败原因;
  • Rust 连接器无模式写入支持获取写入行数
  • Go 连接器压测工具发布;
  • STMT2 写入支持设置某些列为固定值、支持重复表名绑定,简化批量写入编程;
  • 修复:系统升级时配置参数更新失败、多级存储变更单个挂载点后无法启动、Explorer 6060 端口不再支持 /rest/sql(接口收敛)等。

九、升级建议与总结

3.3.7.0 是一个能力面大幅扩展的版本,建议按以下路径评估升级:

  1. 新类型规划:如业务涉及图片、音视频、序列化对象等二进制数据,可规划 BLOB/MEDIUMBLOB 字段,并同步升级各语言连接器至支持 BLOB 的版本;
  2. 流计算迁移:若存量流任务基于旧版窗口语义,需对照 docs/zh/07-stream-processing/01-syntax.md 的触发类型与窗口选项核对语法兼容性,尤其注意计数窗口"指定列触发"与乱序/删除重算语义;
  3. 存储架构调整:需要跨集群查询历史数据时,可评估数据挂载(MOUNT)能力,注意其只读、单 dnode、不支持流计算/订阅等限制;多级存储上共享存储时需确认挂载点路径与local.json配置;
  4. 可靠性配置:可开启walForceRepair让启动过程自动检测并修复损坏的 WAL 文件;
  5. 连接器升级:WebSocket 链路建议升级以获取自动重连、Failover 与 IPv6 支持,并配合版本匹配检测尽早暴露版本不兼容问题。

整体而言,3.3.7.0 以"流计算重构 + BLOB 二进制类型 + 数据挂载 + MQTT 订阅"四件大事为主线,配合连接器生态的自动重连、Failover、IPv6 与版本匹配能力,以及 47 项问题修复,为生产环境的稳定性、可观测性与数据流动性提供了更完整的基础。相关 SQL 语法与数据类型细节可继续查阅 docs/zh/05-tdengine-sql/、docs/zh/06-data-subscription/、docs/zh/07-stream-processing/ 与 docs/zh/08-data-ingest-and-delivery/ 等目录下的配套文档。

  • 数据库
  • 时序数据库
  • 物联网
  • 大数据
  • 实时分析
  • 云原生

【免费下载链接】tdengine

TDengine is an open source, high-performance, cloud native time-series database optimized for Internet of Things (IoT), Connected Cars, Industrial IoT and DevOps.

项目地址:https://gitcode.com/taosdata/tdengine
点击查看免费下载

相关推荐

上一篇:brpc代码质量提升:持续改进代码质量的方法
下一篇:5分钟搞定磁盘IO监控:Telegraf实战指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询