一、引言:时序与结构化数据不该“分家而治”
工业互联网场景中,一台风力发电机组每秒钟上报数十个运行参数(电压、转速、温度、振动频率),这些时序数据日增量可达千万级。运维工程师不仅需要查询最近5分钟的温度曲线,还需要关联该机组的型号、安装日期、维修历史、备件库存等结构化信息,以判断是否存在故障隐患。如果时序数据存在时序库、结构化数据存在关系库,每一次综合查询都是跨系统联表——开发复杂度高、查询响应慢、数据一致性问题突出。
天翼云数据库选择了一条“融合而非拼接”的技术路线。其HTAP处理引擎并不是简单地将时序数据库和关系数据库打包在一起,而是从存储层开始就设计了统一的列式存储格式,能够同时高效编码时序标签和时间戳,以及结构化表的行列数据。在执行层,引擎内置了事务处理和分析处理两套执行模式,由智能调度器根据查询类型和系统负载自动选择或组合使用,使实时查询获得低延迟响应,批量分析获得高吞吐扫描。两者共享同一份数据副本,既避免了数据重复存储,也保证了查询结果的一致性。下文将深入解析这套融合架构的设计精髓。
二、统一存储格式:让时序与结构化数据同栖共生
2.1 存储引擎的双模式适配
传统关系型数据库的行存格式对单行点查高效,但对时序数据的大范围范围扫描不友好;时序数据库的列存格式擅长聚合扫描,但对结构化表的多列条件过滤和多表关联支持薄弱。天翼云数据库的存储引擎采用自适应行列混合存储,同一张表或同一数据分区内可同时存在行存区和列存区,根据数据的写入模式和查询特征动态调整。
对于时序数据(按设备+时间标签写入,多为追加写),引擎自动将其组织为按时间排序的列存块,每列独立压缩,时间戳列采用差值编码,数值列采用游程编码或位压缩,使得时序数据的存储空间压缩率可达5~10倍,同时范围扫描极快。对于结构化业务数据(频繁更新、多条件查询),引擎采用行存格式配合二级索引,保证点查和事务更新的效率。两种存储格式在同一表空间内共存,并通过统一的元数据管理模块协调访问,应用层无需关心数据物理存放形式。
2.2 时序数据特有的索引与预聚合
时序查询往往带有“最近N分钟”或“标签过滤”条件。引擎为时序数据构建时间分区索引与倒排标签索引的组合:时间分区将数据按小时或天切分,查询时只扫描相关分区;倒排索引将每个标签键值对映射到对应的时间分区列表,快速定位设备数据的位置。同时,引擎支持自动预聚合——对于高频采集的原始时序数据,系统在写入或后台周期性生成分钟级、小时级的预聚合统计数据(均值、最大值、最小值、计数),存储为轻量级物化视图。预聚合数据同样存放在统一存储中,当查询带有明确的时间粒度要求时,优化器自动选择预聚合数据而非原始数据,响应速度提升可达数倍至数十倍。
2.3 数据生命周期管理与归档分层
海量时序数据最突出的挑战是数据膨胀。引擎内置数据生命周期管理策略,用户可为不同设备类型或数据表设置保留策略——例如“原始数据保留30天,分钟级聚合保留90天,小时级聚合保留1年,年度汇总保留永久”。到达期限后,引擎自动将数据迁移至更低成本的存储介质或执行物理删除,释放高性能存储空间。整个迁移过程对查询透明,应用始终通过统一访问接口读取数据,无需感知数据位于热存还是冷存。
三、双引擎协同调度:实时与分析各取所需
3.1 事务引擎与分析引擎的分工
HTAP处理引擎内部包含两个执行子引擎:事务引擎面向高并发在线事务处理,擅长主键/索引点查、短事务更新、以及小范围的精确查询,采用行存和索引路径执行,延迟控制在毫秒级;分析引擎面向大规模数据扫描和复杂聚合,利用列存和向量化执行,支持多表Join、窗口函数、分组聚合等高计算密度操作。
两套引擎共享同一份数据,但使用各自的执行上下文和资源配额。调度器在接收到SQL请求时,通过查询解析和代价估算,自动判断该请求属于“事务型”还是“分析型”,并路由至对应的执行引擎。对于混合型查询(例如“实时查询当前库存同时聚合过去7天销量趋势”),调度器将查询拆分为两个子查询,分别由事务引擎和分析引擎并行执行,最后在协调层合并结果。
3.2 一体化调度策略
一体化调度的核心在于避免两套引擎之间的资源争抢和任务饥饿。调度器维护一个全局任务队列,按查询类型分配不同的优先级权重:在线事务请求默认高优先级,保证业务实时性的硬指标;批量分析请求默认低优先级,允许在资源空闲时利用所有可用算力。同时引入动态资源配额——当分析引擎占用CPU超过安全水位时,调度器主动降低其并发度或将其部分任务挂起,优先保障事务引擎的资源需求。这种“事务优先、分析填缝”的调度策略,使得混合负载可在同一集群上安全运行,无需单独部署分析集群。
3.3 一致性读与快照隔离
分析查询通常运行时间较长,若查询过程中底层数据不断更新,可能读到不一致的中间状态。引擎采用多版本并发控制,每个查询启动时获取当前的时间戳快照,所有数据读取基于该快照版本,后续的数据更新生成新版本而不覆盖旧版本,保证了查询结果的确定性和一致性。快照版本在查询结束后由后台回收,版本清理策略根据查询频率和保留窗口自动调整,避免版本堆积导致的存储膨胀。
四、混合查询优化:让复杂SQL在海量数据上“跑得动”
4.1 查询重写与智能路由
优化器接收到混合查询后,首先进行查询重写——利用存储层的统计信息(各列的数据分布、时间分区大小、预聚合视图可用性)对SQL进行等价改写,尽可能将计算下推到存储节点,减少数据传输。例如,查询“最近1小时某设备温度均值”会被优化器重写为直接读取预聚合表,而无需扫描原始时序数据。同时,优化器决策哪些子查询走事务引擎(行存)、哪些走分析引擎(列存),生成跨引擎的执行计划。
4.2 动态分区裁剪与索引选择
对于带有时间范围或标签过滤条件的查询,优化器利用时间分区索引和标签倒排索引进行动态裁剪——只扫描符合条件的少数分区,而非全表扫描。在海量时序数据场景下,裁剪效果直接决定查询成败——未经裁剪的全分区扫描可能需要扫描数十亿行,响应时间以分钟计;裁剪后可能仅扫描几个分区的数百万行,响应时间降至秒级。
4.3 自适应查询超时与退避
混合负载下,部分复杂分析查询可能受数据倾斜或资源争抢影响而运行缓慢。优化器配置了自适应超时机制:查询运行超过正常预期时间后,系统自动收集执行过程中的实际行数和处理速度,重新估算剩余所需时间。若估算时间过长(如超过用户配置的最大容忍时间),则主动终止查询并返回错误信息,避免耗尽资源影响其他业务。这种机制保障了混合负载下系统的整体稳定性。
五、资源隔离与动态分配:让事务与分析互不打扰
5.1 计算资源池的物理隔离
在关键业务场景中,分析查询的资源争抢可能直接影响在线事务的响应时间。HTAP引擎支持物理资源池隔离——管理员可为事务引擎和分析引擎分别配置独立的CPU核集和内存配额,两者在不同物理核或不同容器上运行,从根本上消除资源争抢。隔离粒度和比例可根据业务重要性和负载特征动态调整,例如工作日白天事务优先(分配70%资源),晚间分析窗口放宽至50%。
5.2 内存使用的精细化管控
分析查询的大规模中间结果(如Hash表、排序缓冲区)容易撑爆内存。引擎为每个查询设置内存使用上限,当某个查询的内存消耗接近上限时,系统自动将其中间结果溢出到磁盘临时文件,而非直接OOM。同时,全局内存池按比例分配给事务引擎和分析引擎,任一引擎的内存使用超过配额时触发限流,保证另一引擎不受影响。
5.3 存储I/O优先级
时序数据写入和事务日志写入都属于高优先级I/O,而分析查询的大规模扫描属于低优先级I/O。存储层支持I/O优先级标记,高优先级I/O请求在设备驱动层获得优先调度,确保写入延迟不因分析扫描而飙升。同时,分析扫描的I/O采用较大的预读块大小和异步提交方式,以发挥批量读取的吞吐优势,而非追求单次I/O的极低延迟。
六、落地场景与运维观察
在某大型新能源企业的智能运维平台中,天翼云数据库HTAP引擎融合了超过2000台风力发电机组的时序监控数据(每秒上报20个指标)与完整的设备档案、工单维修记录结构化数据。上线后,运维工程师原本需要分别查询时序库和关系库后手工关联的“设备健康度综合诊断”操作,现在单条SQL即可完成,平均响应时间从原来的2.5分钟缩短至8秒。平台的整体存储空间因统一存储和预聚合压缩,相比原有时序库+关系库独立部署节省了45%的存储成本。
运维侧观察到,在业务峰值期间(早8-10点),事务引擎的写入QPS稳定在3.2万,分析引擎的并发查询数达到30~50个,两者在资源隔离策略下互不干扰。分析引擎在深夜批量生成前一日聚合报表时,系统自动提高了其可用资源配额,任务在1.5小时内完成,相比之前提前了2小时。
持续优化方向包括:引入基于负载预测的智能资源预调配,在业务高峰来临前自动收紧分析引擎的并发度,在低谷时放宽,使资源利用更加贴合业务节奏。
七、总结:HTAP融合的本质是降低“数据认知”的延迟
时序数据与结构化数据在物理特征和查询模式上确有不同,但这不应成为业务分析师跨数据源思考的障碍。天翼云数据库的HTAP融合方案,通过统一存储、双引擎协同、混合查询优化和资源隔离,将两种数据世界整合为一张逻辑视图,让业务人员在海量数据面前仍能自由地进行“探索式查询”——先看实时状态,再追历史趋势,后关联上下文信息,所有操作在一个系统中完成。
融合处理引擎的价值不仅在于降低了硬件成本和运维复杂度,更在于它缩短了“从数据产生到数据洞察”的时间链。当实时业务查询与批量分析能够在同一套调度体系下一体化运行时,企业的数据应用便可从“离线报表驱动”进化为“实时感知驱动”,这正是海量数据场景下数据库技术演进的核心方向。