在数据浪潮汹涌澎湃的今天,实时数据处理能力已成为企业驰骋商业战场的关键利刃。2025年8月7日晚,备受瞩目的「DolphinDB 核心技术解密」系列直播 ——“ DolphinDB 流式 SQL 处理技术分享”,在技术爱好者们热切的期盼中如期而至。这场直播由 DolphinDB 研发副总监程训焘博士主讲,聚焦流式 SQL 计算技术分享,解密 DolphinDB 核心技术基因。
回想直播还意犹未尽?本文为你精准提炼直播干货,一键 get 所有精彩!
关注 DolphinDB 公众号,回复【0807】,获取本次直播课件~
搜索 DolphinDB 视频号,查看完整直播回放
1. 为什么实时数据处理需要流式SQL
最初,企业采用 MySQL +应用端缓存的架构,该架构在当时满足了业务的基本需求,为企业的数字化转型奠定了基础。随后,业务规模扩大,数据交互需求增加,企业引入了 Redis,形成了第二代架构,MySQL 与 Redis 的组合在一定程度上提高了数据读取速度,缓解了数据库压力,适用于对数据实时性要求不高的业务场景,如电商、互联网等领域。
随着企业业务的快速发展,金融交易、实时监控等对实时性要求极高的业务场景相继出现,App 和 Web 程序向数据库发送大量并发请求,此时数据库的负载将急剧增加,导致延迟和网络传输压力,极大影响用户体验和业务效率。为应对此问题,DolphinDB 流式 SQL 应运而生,采用注册式订阅结果机制,构建出一个以增量计算为核心的全新 SQL Engine 。
2. 流式SQL计算代价最小化:技术深水区的破浪前行
(1)系统设计
DolphinDB 流式 SQL 专门用于处理流式场景,通过将批算法改为流算法,以适应实时数据处理的需求,减少计算延迟和网络传输压力,提高系统的可扩展性。作为一个增量计算系统,DolphinDB 流式 SQL 能够基于之前计算结果和新的数据增量,实时更新查询结果,而不需要每次都重新扫描整个数据集。
为了实现高性能的流式计算, DolphinDB 流式 SQL 采用内存换时间的策略。系统将大量的数据和中间结果存储在内存中,从而避免频繁的磁盘 I/O 操作,以额外的内存使用量换取更高效的计算速度。当然,在实际部署中,您可以根据特定的业务需求灵活调整内存使用和性能表现,以达到帕累托最优的“效率理想王国”。
(2) 原理:流式 SQL 的核心工作机制
在 DolphinDB 流式 SQL 中,每个关系代数算子都被建模为一个流计算算子,这种设计是增量计算系统得以高效运作的原因,即实现以增量的方式处理数据流。当数据流中的新数据到达时,系统只需对新增数据进行处理,而无需重新处理整个数据集。这不仅提高了数据处理的效率,还显著降低了系统的延迟和资源消耗。
主要算子包括 Projection(投影)、Filter(过滤)、Join(连接)和 Order by(排序)。每个算子都有其特定的处理逻辑,以适应不同的数据操作需求。简单来说,Projection 选择特定的列进行输出,可用于减少数据维度,提高处理效率;Filter 根据特定条件过滤,能够有效地减少数据量,快速筛选出用户感兴趣的数据;Join 将两个数据流进行连接,在多数据源整合和复杂数据关联分析中发挥着关键作用;Order by 通过索引维护数据的顺序关系,确保排序操作的高效性,例如实时数据监控和排序展示。
(3)索引:提升流式 SQL 性能的关键
在金融交易监控中,按价格从高到低排序可帮助交易员迅速锁定获利机会;在物联网传感器数据监测中,按时间戳排序能清晰呈现事件的发展脉络……在实时场景中,用户需要排序以便更直观地分析和处理数据。传统的排序方法通常需要对数据进行频繁的移动和重新组织,显著增加端到端的延迟,延迟的增加可能导致错过最佳决策时机。为应对这个问题,DolphinDB 流式 SQL 设计了无序堆存储与索引协作的优化机制。
无序堆允许数据以任意顺序快速插入,保证了数据写入的高效性。索引存储了数据的键值以及对应的数据在无序堆中的位置,可以把排序键关联到行号,并用行号在堆里找到实际的数据;当数据插入、更新或删除时,系统会动态维护索引项;在需要对查询结果进行排序时,索引可以提供已排序的键值序列,系统只需按照索引中的顺序访问数据,即可得到排序后的结果,不用频繁的移动和重新组织数据,从而实现系统的高性能和低延迟。
3. 性能实测:DolphinDB 实时数据处理的硬核实力
在直播中,程博士通过一个实际的 demo 展示了 DolphinDB 的强大性能。下面的代码展示了使用声明流式 SQL 获得持续更新结果表的全过程:创建两个包含1000条随机数据的共享键值表t1、t2,使⽤ Query ID 订阅 SQL 结果,输出经过过滤(t1.value > 50.0)和排序(按 t1.id + t2.id 和 t1.value - t2.value 降序)后的结果集
在性能测试中,通对表的插入、更新、混合处理(包含增加、删除和更新),最低的端到端延迟仅 7ms 左右,这充分证明了 DolphinDB 在处理实时数据时的高效性和低延迟特性。
展望未来,DolphinDB 将持续深化技术创新,以满足不断增长的实时数据处理需求。我们将持续深耕流式查询计划优化器、流式执行器和流式算子优化等关键领域,引入共享流式算子和共享内存哈希表等优化,为复杂查询场景带来更优化的解决方案,助力企业更好地应对未来的数据挑战。
4.问答集锦
Q: 如果要同时处理批数据和流数据怎么办?
A:DolphinDB 支持批处理和流处理的融合,可以在一个系统中同时处理两种类型的数据。我们的流计算框架提供了流批一体的机制,可以将一套核心代码同时用于批计算(投研)和流计算(交易),并保证两者的结果一致。
Q: 内存换时间:实际中怎么平衡内存使用和性能表现呢?
A :内存换时间是 stream sql 的必要手段,需要根据业务特点和需求来平衡内存使用和性能表现。对于需要实时处理的高频交易场景,可以适当增加内存使用以确保低延迟;而对于对实时性要求不高的分析任务,可以减少内存使用,优化存储成本。DolphinDB 的优化器可以自动选择执行策略,不需要用户手动调整。
Q :order by 通常需要维护状态,你们怎么处理类似这些有状态的操作?
A:之前我们专门介绍了索引,对于有状态操作,如排序、聚合等,DolphinDB 通过维护索引来跟踪数据的变化,确保排序结果的正确性,同时减少内存拷贝和提高性能。
5. 加入技术交流群
加入技术直播交流群,后续可获取 DolphinDB 直播材料,与各方技术大佬直接交流,先一步预约「DolphinDB 核心技术解密」系列直播第二期:《DolphinDB 即时编译计算加速技术分享》