规则 优化 响应动作 mysql数据库 update操作 支持动态表名

需求:规则 优化 响应动作 update操作 支持动态表名

环境

  • EMQX 版本:4.4.16
  • 操作系统版本:macos(开发)、ubuntu 20(测试、生产)

功能请求

mysql数据库表如下:

CREATE TABLE `t_mqtt_msg` (
 `msgid` int NOT NULL AUTO_INCREMENT,
 `topic` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
 `qos` int DEFAULT NULL,
 `payload` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
 `status` int DEFAULT NULL,
 `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
 `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`msgid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

SQL输入

SELECT

  payload.msgid as msgid,
  payload.status as status,
  payload.stable as stable

FROM

  "test/mysql"

payload

{
  "msgid":1,
  "status":1,
  "stable":"t_mqtt_msg"
}

描述你需要的功能

通过此功能,我们可以与网关层通信,通过网关回写状态,对不同的业务表进行消息到达回传更新操作

为什么你需要这个功能

如果实现了这个功能
我们在规则处就不要配置针对不用表的业务,进行update操作的多种规则添加,导致后期维护的困难


其他

抱歉错过了你的帖子,我大概了解了你的需求,我会尽快和产品团队讨论它。

后续有任何更新,我会在这里和你同步。

没有使用批量的情况下(只有 insert 语句可以使用批量),创建 MySQL 动作的时候是需要先 Prepare Statement 的,所以这种是不能使用动态的表名的。

如果要使用动态的表名,那么就必须放弃 Prepare Statement,这可能会带来大概 50% 的性能下降。

如果性能下降可以接受,我们会跟团队商量这个方案。

目前硬件端的需求是完成这种MQTT broker下发与回写业务即可,数据库就是mysql的单条update操作,应该不会太考虑性能。您这边团队再考量一下。