EMQX 集成 TimescaleDB 数据桥接实战:基于 PostgreSQL 扩展的时序数据写入方案
后端物联网消息队列通信【免费下载链接】emqxThe most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles项目地址https://gitcode.com/gh_mirrors/em/emqx点击查看免费下载导读本文围绕 EMQX 开源仓库中的emqx_bridge_timescale应用系统讲解 EMQX 如何通过数据桥接Bridge将 MQTT 消息批量写入时序数据库 TimescaleDB。由于 TimescaleDB 本质上是 PostgreSQL 的时序扩展EMQX 在实现上直接复用了 PostgreSQL 连接器与动作Action的整套配置体系本文将从模块结构、配置项、SQL 模板到 HTTP 管理 API 全链路展开帮助读者掌握创建连接器、编写规则 SQL、配置批量写入参数以及通过 API 管理桥接的完整方法。TimescaleDB 与 EMQX 数据集成背景根据 apps/emqx_bridge_timescale/README.md 的描述TimescaleDB 是一款面向时序数据设计的开源数据库其核心特性包括基于 PostgreSQL 构建TimescaleDB 不是独立数据库而是以 PostgreSQL 扩展extension的形式打包发布因此天然继承 PostgreSQL 的全部能力自动分区支持按时间维度time和空间维度partitioning key自动分区解决时序数据量持续增长下的存储与查询性能问题完整 SQL 支持用户可以直接使用标准 SQL 进行数据写入与聚合查询无需学习专用查询语言。而emqx_bridge_timescale这个应用的作用正是连接 EMQX 与 TimescaleDB用户可以创建一条规则Rule借助 EMQX 规则引擎EMQX Rules将海量 IoT 数据便捷地写入 TimescaleDB。在 EMQX 5.x 的桥接体系Bridge v2中桥接被拆分为**连接器Connector与动作Action**两个层次Connector 负责建立并管理到数据库的连接资源Action 负责在规则触发时执行具体的写入 SQL。为什么 TimescaleDB 桥接直接复用 PostgreSQL 实现从源码结构看TimescaleDB 桥接的整套 Schema 几乎全部委托给 PostgreSQL 相关模块这是本文最值得关注的设计点。在 apps/emqx_bridge_timescale/src/emqx_bridge_timescale.erl 中可以看到清晰的委托关系fields(config_connector)直接返回emqx_postgresql_connector_schema:fields(config_connector)即连接器配置完全复用 PostgreSQL 连接器fields(post)、fields(action)、fields(put_bridge_v2)等均委托给emqx_bridge_pgsql:fields(...)连接器示例connector_examples/1与桥接示例bridge_v2_examples/1也分别取自 PostgreSQL 连接器 Schema 与 PostgreSQL 桥接的values/1。更进一步在 apps/emqx_bridge_timescale/src/emqx_bridge_timescale_connector_info.erl 中type_name() - timescale、bridge_types() - [timescale]定义桥接类型标识resource_callback_module() - emqx_postgresql明确底层资源回调直接复用 PostgreSQL 驱动即实际建立数据库连接、执行 SQL 的模块与 PostgreSQL 桥接完全一致config_schema()引用emqx_bridge_timescale模块的config_connector字段。动作注册方面apps/emqx_bridge_timescale/src/emqx_bridge_timescale_action_info.erl 声明了action_type_name() - timescale、connector_type_name() - timescale与schema_module() - emqx_bridge_timescale。这两个 info 模块通过 apps/emqx_bridge_timescale/mix.exs 中的emqx_action_info_modules与emqx_connector_info_modules应用环境变量注册到 EMQX使系统能够在启动时发现并加载该桥接类型。因此可以总结出该模块的核心实现事实只要目标 PostgreSQL 实例安装了 TimescaleDB 扩展EMQX 的 PostgreSQL 数据通道即可无缝服务时序场景无需为 TimescaleDB 单独实现连接驱动这大幅降低了维护成本。连接器Connector配置项详解TimescaleDB 连接器的配置字段定义在 apps/emqx_postgresql/src/schema/emqx_postgresql_connector_schema.erl 的fields(connection_fields)中主要参数如下配置项类型/默认值说明server字符串形如127.0.0.1:5432PostgreSQL/TimescaleDB 服务地址默认端口定义在 apps/emqx_postgresql/include/emqx_postgresql.hrl 中为5432?PGSQL_DEFAULT_PORTdatabase字符串目标数据库名称示例值为emqx_datausername字符串必填数据库用户名示例值为postgrespassword字符串数据库密码示例值为publicpool_size整数默认8连接池大小application_name字符串默认emqx连接的应用名会通过validate_application_name/1校验disable_prepared_statements布尔是否禁用预处理语句ssl映射TLS 配置包含enable默认 false、verify、versions默认tlsv1.3/tlsv1.2、depth默认 10、ciphers、secure_renegotiate、reuse_sessions、hibernate_after等除连接字段外连接器还叠加了emqx_connector_schema:common_fields()如enable与资源选项resource_opts连接池、超时等资源级控制。一个典型的连接器配置示例如下取自 emqx_postgresql_connector_schema.erl 的示例值connectors { timescale my_timescale_connector { server 127.0.0.1:5432 database emqx_data username postgres password public pool_size 8 application_name emqx ssl { enable false } enable true } }动作Action与 SQL 模板TimescaleDB 动作的配置在 apps/emqx_bridge_pgsql/src/emqx_bridge_pgsql.erl 中定义动作核心参数action_parameters只有一个字段sql类型为 SQL 模板字符串emqx_schema:template()用于描述将消息写入哪张表、哪些列。其默认 SQL 为insert into t_mqtt_msg(msgid, topic, qos, payload, arrived) values (${id}, ${topic}, ${qos}, ${payload}, TO_TIMESTAMP((${timestamp} :: bigint)/1000))该模板展示了两个关键实践占位符绑定规则上下文${id}、${topic}、${qos}、${payload}、${timestamp}是 EMQX 规则引擎暴露的 SQL 占位符运行时会被消息对应的字段值替换时间戳转换TO_TIMESTAMP((${timestamp} :: bigint)/1000)将毫秒级时间戳转换为 TimescaleDB 可存储的时间类型充分利用时序数据库按时间分区的能力。动作层还包含resource_opts资源选项其默认值在fields(action_resource_opts)中定义batch_size默认100、batch_time默认100ms即开启批量写入——规则触发后最多积攒 100 条记录或等待 100ms 便批量刷入数据库。此外在 emqx_bridge_pgsql.erl 的示例值中还可看到inflight_window默认 100、max_buffer_bytes默认256MB、request_ttl默认45s、worker_pool_size默认 16等生产级调优项。这些批量参数对时序数据这种高频小消息场景尤为重要合理调大batch_size/batch_time可显著降低数据库写入压力。动作配置示例取自values(parameters)PostgreSQLType为timescale时生成bridges { timescale my_timescale_action { type timescale enable true connector my_timescale_connector resource_opts { batch_size 100 batch_time 100ms inflight_window 100 max_buffer_bytes 256MB request_ttl 45s worker_pool_size 16 } parameters { sql INSERT INTO client_events(clientid, event, created_at) VALUES (${clientid}, ${event}, TO_TIMESTAMP((${timestamp} :: bigint))) } } }实战接入流程结合上述配置将 IoT 数据写入 TimescaleDB 的标准流程如下准备数据库在 PostgreSQL 实例中启用 TimescaleDB 扩展CREATE EXTENSION timescaledb;创建目标数据库与数据表如t_mqtt_msg并按时间维度建立分区hypertable创建连接器通过 Dashboard 的“数据集成”页面或 HTTP API 创建timescale类型连接器填写上文连接器配置项创建动作在连接器下创建timescale类型动作编写 SQL 模板参考默认模板可自定义表名与占位符映射并按需调整批量参数编写规则创建一条 EMQX 规则选择消息发布message publish等事件作为触发源将动作挂载到规则上实现“MQTT 消息 → 规则 → SQL → TimescaleDB”的完整链路。桥接管理的 HTTP API如 apps/emqx_bridge_timescale/README.md 所述EMQX 为桥接管理提供了一组 HTTP API覆盖创建桥接、更新桥接、查询桥接、停止/重启桥接、列出桥接等操作。这些 API 由桥接管理模块统一提供emqx_bridge_timescale通过fields(post_bridge_v2)、fields(get_bridge_v2)、fields(put_bridge_v2)分别对应创建、查询、更新接口的请求/响应结构连接器侧则由emqx_connector_schema:api_ref/3见 emqx_bridge_timescale_connector_info.erl生成POST/PUT/GET .../connectors/{type}系列接口。典型用法包括创建/更新后调用查询接口确认连接状态status、node_status是否connected写入异常或数据库维护后通过停止/重启接口快速恢复数据通道列出所有桥接以便统一巡检资源健康度。小结EMQX 的 TimescaleDB 桥接是一个“复用 PostgreSQL 通道、叠加时序能力”的典型实现连接驱动完全复用emqx_postgresqlSchema 复用 PostgreSQL 连接器与桥接定义桥接类型标识统一为timescale。开发者只需保证目标库启用 TimescaleDB 扩展即可用标准 SQL 模板配合规则引擎将 MQTT 数据批量写入时序表并通过批量参数与 HTTP API 实现生产级的写入性能与运维管理。相关实现可进一步阅读 emqx_bridge_timescale.erl、emqx_bridge_pgsql.erl 与 emqx_postgresql_connector_schema.erl贡献指南见仓库根目录的 CONTRIBUTING.md。赞分享后端物联网消息队列通信【免费下载链接】emqxThe most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles项目地址https://gitcode.com/gh_mirrors/em/emqx点击查看免费下载相关推荐Glances 集成 TimescaleDB基于 PostgreSQL 的时序数据库监控数据导出实战Glances 集成 TimescaleDB基于 PostgreSQL 的时序数据库监控数据导出实战 Glances 内置了面向 TimescaleDB 的导指标监控监控大盘CLI告警MCP 服务革命性多语言社交媒体AI模型TwHIN-BERT-large完全指南革命性多语言社交媒体AI模型TwHIN BERT large完全指南 TwHIN BERT large 是一个革命性的多语言社交媒体AI模型专门为理解和处理EMQX与PostgreSQL集成关系型数据库数据桥接全指南EMQX与PostgreSQL集成关系型数据库数据桥接全指南 引言物联网数据流的关系型数据库落地挑战 在工业物联网IIoT场景中设备产生的实时数据需要后端物联网消息队列通信上一篇SGLang项目单GPU运行多模型实例的技术方案解析下一篇解决SGLang项目在Kubernetes中部署GPU容器的8大痛点问题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

TiXL 节点详解:BlendVector3——多向量循环插值(Lerp)混合器

TiXL 节点详解:BlendVector3——多向量循环插值(Lerp)混合器

TiXL 节点详解:BlendVector3——多向量循环插值(Lerp)混合器 【免费下载链接】t3 TiXL is an open source software to create realtime motion graphics. 项目地址: https://gitcode.com/GitHub_Trending/t3/t3 本文以 TiXL 开源实时…

2026/9/21 15:17:21 阅读更多 →
naive-ui 图标组件 Icon 与 IconWrapper 完全指南:从基础用法到主题定制

naive-ui 图标组件 Icon 与 IconWrapper 完全指南:从基础用法到主题定制

naive-ui 图标组件 Icon 与 IconWrapper 完全指南:从基础用法到主题定制 【免费下载链接】naive-ui A Vue 3 Component Library. Fairly Complete. Theme Customizable. Uses TypeScript. Fast. 项目地址: https://gitcode.com/gh_mirrors/na/naive-ui naive…

2026/9/21 15:17:21 阅读更多 →
7天用Go从零实现Web框架Gee:从http.Handler到分组中间件与模板引擎的完整实战

7天用Go从零实现Web框架Gee:从http.Handler到分组中间件与模板引擎的完整实战

示例工程 【免费下载链接】7days-golang 7 days golang programs from scratch (web framework Gee, distributed cache GeeCache, object relational mapping ORM framework GeeORM, rpc framework GeeRPC etc) 7天用Go动手写/从零实现系列 项目地址: https://gitc…

2026/9/21 15:17:21 阅读更多 →

最新新闻

CodeIgniter 3.0.2 升级至 3.0.3 实战指南:base_url 自动检测变更与 Host 头注入防护

CodeIgniter 3.0.2 升级至 3.0.3 实战指南:base_url 自动检测变更与 Host 头注入防护

CodeIgniter 3.0.2 升级至 3.0.3 实战指南:base_url 自动检测变更与 Host 头注入防护 【免费下载链接】CodeIgniter Open Source PHP Framework (originally from EllisLab) 项目地址: https://gitcode.com/gh_mirrors/co/CodeIgniter 本文面向正在使用 Code…

2026/9/21 15:51:58 阅读更多 →
使用 Native Image Gradle Plugin 集成 Reachability Metadata:从元数据仓库到 Tracing Agent 的完整实战指南

使用 Native Image Gradle Plugin 集成 Reachability Metadata:从元数据仓库到 Tracing Agent 的完整实战指南

使用 Native Image Gradle Plugin 集成 Reachability Metadata:从元数据仓库到 Tracing Agent 的完整实战指南 【免费下载链接】graal GraalVM compiles applications into native executables that start instantly, scale fast, and use fewer compute resources …

2026/9/21 15:51:58 阅读更多 →
FoundationDB Go 绑定(fdb-go)开发指南:安装、构建与事务编程实战

FoundationDB Go 绑定(fdb-go)开发指南:安装、构建与事务编程实战

FoundationDB Go 绑定(fdb-go)开发指南:安装、构建与事务编程实战 【免费下载链接】foundationdb FoundationDB - the open source, distributed, transactional key-value store 项目地址: https://gitcode.com/gh_mirrors/fo/foundationd…

2026/9/21 15:51:58 阅读更多 →
Moya 端点(Endpoint)深度指南:理解 Target 到 Endpoint 再到 URLRequest 的完整映射链路

Moya 端点(Endpoint)深度指南:理解 Target 到 Endpoint 再到 URLRequest 的完整映射链路

Moya 端点(Endpoint)深度指南:理解 Target 到 Endpoint 再到 URLRequest 的完整映射链路 【免费下载链接】Moya Network abstraction layer written in Swift. 项目地址: https://gitcode.com/gh_mirrors/mo/Moya Endpoint 是 Moya 中…

2026/9/21 15:51:58 阅读更多 →
做一套企业招聘系统,传统开发要7天,飞算JavaAI为什么15分钟就跑通了?

做一套企业招聘系统,传统开发要7天,飞算JavaAI为什么15分钟就跑通了?

一个中等复杂度的管理后台,传统开发通常会排出这样的时间:前端约3天、后端约2天、前后端联调约2天,加起来约7天。 这7天到底花在了哪里?同一套需求换成飞算JavaAI后,由一名Java后端从需求输入推进到前后端项目运行&…

2026/9/21 15:51:58 阅读更多 →
Swagger Codegen Bash 客户端模型文档解读:以 Petstore 的 Category 模型为例

Swagger Codegen Bash 客户端模型文档解读:以 Petstore 的 Category 模型为例

开发工具代码生成API设计 【免费下载链接】swagger-codegen swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. 项目地址: http…

2026/9/21 15:50:58 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →