StreamSQL 是一个专为物联网边缘场景设计的轻量级流处理引擎。它使用熟悉的 SQL 语法来处理无界数据流,让开发者能够用简单的 SQL 语句实现复杂的实时数据分析。它也可以作为 RuleGo 组件融入 RuleGo 生态,利用其提供丰富的输入输出以及数据处理组件库和规则引擎功能。
流式计算的新选择
在传统的流式数据处理场景中,开发者通常面临两个极端的选择:
- 时序数据库方案:如 InfluxDB、TimescaleDB 等,虽然存储能力强,但实时计算能力有限,复杂聚合运算性能不佳
- 重型分布式框架:如 Apache Flink、Apache Storm 等,功能强大但部署复杂,资源消耗巨大,不适合边缘环境
StreamSQL 提供了第三种选择:一个专为边缘端设计的轻量级流处理引擎,能够在资源受限的环境中对海量数据进行实时聚合运算,填补了轻量级与高性能之间的空白。
典型应用场景
边缘 - 云协同架构:在物联网和工业 4.0 场景中,大量传感器和设备产生海量原始数据,如果直接上传云端会造成:
- 网络带宽压力巨大
- 云端计算成本高昂
- 实时性要求无法满足
StreamSQL 的解决方案:
海量原始数据 → 边缘端StreamSQL处理 → 聚合结果 → 云端存储/分析 (TB级) (实时过滤/聚合) (MB级) (长期存储)
具体场景示例:
- 智能工厂:1000 台设备每秒产生 10 万条数据,边缘端实时聚合为每分钟 100 条关键指标
- 智慧城市:数千个传感器的环境数据,边缘端预处理后只上传异常事件和统计摘要
- 车联网:车队实时数据在边缘网关聚合,只向云端发送驾驶行为分析和异常告警
StreamSQL 是什么
StreamSQL 是一个专为物联网边缘场景设计的轻量级流处理引擎。它使用熟悉的 SQL 语法来处理无界数据流,让开发者能够用简单的 SQL 语句实现复杂的实时数据分析。它也可以作为 RuleGo 组件融入 RuleGo 生态,利用其提供丰富的输入输出以及数据处理组件库和规则引擎功能。
核心架构
核心组件
- SQL 解析器 (rsql): 解析标准 SQL 语句,生成抽象语法树 (AST),配置流处理管道
- 流处理器 (stream): 实时数据处理,过滤和转换,聚合计算
- 窗口管理器 (window): 时间窗口:滚动、滑动、会话,计数窗口,窗口生命周期管理
- 函数系统 (functions): 60+ 内置函数,插件式自定义函数,8 种函数类型支持
- 表达式引擎 (expr): 算术表达式计算,逻辑表达式处理,字段引用解析
设计理念
- 轻量级优先:纯 Go 实现,零外部依赖,内存高效,秒级启动。专为边缘设备和资源受限环境设计。
- SQL 优先:使用标准 SQL 语法,声明式编程,业务逻辑直观表达,学习成本极低。
- 扩展优先:插件化架构,支持热插拔函数,与 RuleGo 深度集成,利用其丰富的输入输出组件生态,并支持热更新。
技术特点
- 高性能:流式处理,内存计算,并发设计,充分利用多核性能。
- 易于使用:SQL 语法,简单 API,几行代码即可启动,丰富示例覆盖常见场景。
- 纯内存计算:无磁盘存储,所有计算都在内存中进行,处理速度极快。
- 基础库设计:可作为基础库集成到其他项目中,仅依赖 Go 标准库和 expr 表达式引擎,无第三方依赖。
- RuleGo 集成:与 RuleGo 深度集成,利用其丰富的组件生态:
- 数据输入:MQTT、HTTP、WebSocket、TCP/UDP、消息队列、文件等
- 数据输出:数据库、消息队列、REST API、邮件、短信等
- 数据处理:过滤、转换、路由、聚合等 60 + 组件
- 扩展能力:自定义组件、热插拔、动态配置
- 低代码:无需编写代码,仅需配置规则链即可实现复杂的数据处理逻辑。
适用场景
适合场景
- 边缘计算:物联网设备、工业网关、边缘服务器
- 实时分析:设备监控、异常检测、实时告警
- 快速部署:单机部署、容器化、嵌入式应用
- 原型验证:快速验证流处理逻辑和业务规则
- RuleGo 增强:为 RuleGo 规则链添加 SQL 流处理能力
不适合场景
- 大规模集群:需要水平扩展的分布式系统
- 复杂状态:需要持久化状态管理的应用
- 高并发写入:超出单机处理能力的数据量
- 事务处理:需要 ACID 特性的复杂事务场景
核心应用场景
工业物联网 - 海量设备数据实时处理
设备监控与预测性维护:实时监控设备状态,异常检测,预测性维护
场景描述:某制造工厂有 1000 + 设备,每秒产生 10,000 + 数据点,需要实时监控和异常检测
-- 设备异常检测示例 - 处理百级TPS数据流 SELECT device_id, COUNT(*) as data_points, AVG(temperature) as avg_temp, MAX(temperature) as max_temp, STDDEV(vibration) as vibration_variance, CASE WHEN AVG(temperature) > 80 OR STDDEV(vibration) > 5 THEN 'ALERT' ELSE 'NORMAL' END as status FROM stream GROUP BY device_id, TumblingWindow('5m') HAVING status = 'ALERT'
智慧城市
- 交通流量优化:实时分析交通流量,拥堵检测,信号灯优化
- 环境监测:空气质量监测,污染预警,环境数据分析
车联网 - 大规模车队实时监控
车辆状态监控:实时监控车辆运行状态,故障诊断,驾驶行为分析
场景描述:某物流公司拥有 5000 + 车辆,每辆车每秒上报 20 + 数据点,总计 100,000+ events/sec
-- 车辆异常检测 - 处理百万级数据流 SELECT vehicle_id, COUNT(*) as total_events, AVG(engine_temp) as avg_engine_temp, MAX(engine_temp) as max_engine_temp, AVG(fuel_consumption) as avg_fuel, COUNT(CASE WHEN brake_pressure > 80 THEN 1 END) as hard_brake_count, COUNT(CASE WHEN speed > 120 THEN 1 END) as speeding_count FROM stream GROUP BY vehicle_id, TumblingWindow('10m') HAVING avg_engine_temp > 90 OR hard_brake_count > 5 OR speeding_count > 3
边缘部署优势:
- 多个边缘节点分布式部署,每个节点处理 1000 + 车辆
- 本地实时处理,减少网络传输压力
- 故障隔离,单点故障不影响整体系统
本次更新重点:
- perf:重构表达式引擎模块
- perf:重构stream模块
- perf:移除持久化策略
- feat:函数支持别名
- feat:完善Case语法
- feat:HAVING语句支持Case
- feat:完善负数支持
- feat:select字段结果按原顺序排序
- feat:select支持字符串常量字段
- feat:AddSkink回调类型改成确定的类型
- feat:非聚合模式支持同步获得处理数据
- test:增加大量的测试用例(代码覆盖率80%)
- chore:完善注释和文档
其他
- StreamSQL 文档:https://rulego.cc/pages/streamsql-overview/
- RuleGo 集成:集成文档 规则链示例
- RuleGo 文档:https://rulego.cc
还没有评论,来说两句吧...