百万测点同时上报,每个测点每秒一条记录,意味着每秒百万级的写入;同一批数据又要支持数年的区间聚合查询。写入与查询对存储的要求方向相反——写入求顺序追加,查询求随机定位。性能工程要在这对矛盾中找到平衡点。
性能挑战的三个来源
平台的性能压力来自三个不同方向,优化手段各不相同。
接入压力来自写入并发。测点数量乘以上报频率就是写入吞吐,百万测点秒级上报即可达百万 TPS。这类负载的特点是持续、均匀,一旦写入被阻塞,数据会积压甚至丢失。
查询压力来自聚合范围。一个含数百万行的测点在数年的区间上求平均、求极值,若不借助预计算,扫描成本高得不可接受。查询负载的特点是突发、不均衡,报表生成时刻集中爆发。
资源压力来自数据总量。长期留存的数据体积庞大,内存装不下全部,存储层的读取效率直接决定查询速度。
压力来源 | 负载特征 | 主要对策 |
接入 | 持续高并发写 | 批量提交、压缩 |
查询 | 突发大范围聚合 | 索引、预聚合 |
存储 | 数据量巨大 | 分级存储、列式组织 |
接入层的优化
写入优化的核心是减少单次操作的开销。逐条写入会产生海量的小事务,开销主要落在日志与索引维护上,与数据本身无关。
批量提交把多条记录合并为一次写入,摊薄事务开销。批量大小的选择需要权衡:过大则延迟升高、内存占用上升,过小则吞吐不足。经验值通常在数百到数千条一批。
数据压缩在写入前就能降体积。测点的数值序列往往变化平缓,采用差分与专用压缩算法可获得数倍甚至更高的压缩比,直接减少磁盘 IO 与存储成本。压缩必须在写入路径上完成,事后压缩对实时查询无益。
连接复用与长连接避免了频繁建连的开销。工业设备多为长连接持续上报,接入层应按连接维度分配缓冲与处理线程,避免连接数暴涨时线程资源耗尽。
查询层的优化
查询优化的起点是减少扫描量。
时间分区是最基础的手段。把数据按时间切分为独立分区,查询限定时间范围时只扫描相关分区,天然跳过无关数据。分区粒度需要按查询模式定——查询多以日、周、月为窗口,分区粒度与之对齐效果最好。
预聚合把高频查询的结果提前算好。对固定周期的均值、极值、累计值,在写入时或定时任务中预计算并存储,查询时直接读取结果而非原始数据。代价是预聚合结果占用额外存储,且无法覆盖临时性的非常规查询。
优化手段 | 适用查询 | 代价 |
时间分区 | 限定时间范围 | 分区管理开销 |
预聚合 | 固定周期统计 | 额外存储 |
索引 | 按标签过滤 | 写入开销 |
缓存 | 热点重复查询 | 内存占用 |
缓存用于吸收重复查询。看板类的查询模式高度重复,结果缓存后命中率可观。缓存的有效期需要短,工业数据实时变化,过期结果会造成误判。
容量规划
容量规划不是拍脑袋估数,而是基于可测参数推算。
存储容量由测点数、上报频率、单条记录体积、压缩比与留存时长共同决定。内存容量决定能缓存多少热数据,通常按”近数天到数周的活跃数据”估算,让热查询不必触碰磁盘。计算容量由写入 TPS 与查询 QPS 共同决定,两者对 CPU 的消耗方式不同,需分别评估。
规划中要为峰值留出余量。工业场景的峰值来源包括设备批量上线、历史数据回补、以及季度报表的集中查询。余量不足会导致峰值时写入积压,余量过大则浪费资源,通常按峰值的 1.5 到 2 倍预留。
压测方法
性能不能靠推断,要靠实测。压测的关键是模拟真实负载形态,而非追求数字好看。
写入压测应模拟真实的测点分布——并非所有测点都高频上报,多数是低频,少数是关键高频。均匀的高频负载与真实的偏斜负载,对系统的压力完全不同。
查询压测应覆盖典型查询模式:单测点短区间、多测点长区间、跨标签的聚合统计。三种模式的资源消耗差异很大,只测一种会误判系统能力。
压测还要观察长尾。平均延迟漂亮不代表体验好,P99 甚至 P999 的延迟才决定用户是否感到卡顿。工业看板的可用性取决于最慢的那部分请求。
性能指标的定义
衡量平台性能的指标需要成体系。
指标 | 含义 | 参考目标 |
写入 TPS | 每秒落库记录数 | 与接入规模匹配 |
查询 QPS | 每秒完成查询数 | 按并发用户估算 |
P99 延迟 | 99%请求的耗时上限 | 写入<10ms,查询<1s |
写入可靠性 | 无丢失比例 | 接近100% |
压缩比 | 原始/存储体积 | 视数据特征 |
指标之间相互制约。提高并行度能提升 TPS,却可能抬高延迟;优化压缩比能降存储,却增加 CPU 开销。性能工程的任务是在具体业务的优先级下找到平衡,而非追求单项最优。
存储分层与冷热分离
数据总量增长后,全部数据用同一标准存储成本过高。冷热分离按访问频率把数据分层:近期数据查询频繁,放在高性能介质上;历史数据查询稀少,放在低成本介质上。
分层的依据是数据的实际访问模式,而非简单的年龄划分。部分数据虽年代久远却会被周期性调用,例如年度对标;部分近期数据可能从未被查过。系统应统计各时间分区、各测点的真实访问频次,据此决定其存储位置。
迁移策略要平滑,避免迁移窗口内的查询失败。常见做法是在迁移过程中保留索引映射,让查询能透明定位到数据所在的层。查询性能的差异要在界面上如实反映——访问冷数据可能比热数据慢,提前告知好过让用户误以为系统故障。分层粒度也应可调,按测点热度与时间窗双重条件组合,比单一维度更贴合实际访问分布。
结语
性能优化的方向正在从”调参”转向”架构适配”。当测点规模进入百万级,单点的参数调整收效有限,决定性能的是数据组织方式与负载分布是否匹配。TDengine 作为 AI原生工业数据平台在架构上针对高并发写入与大范围聚合做了专门设计,可替代传统工业互联网平台在性能层的堆硬件方案,且整体价格更低。

























