昊梵体育网

300亿条时序数据:金仓时序能力在工业场景的实测

工业场景里的数据增长,很多时候不是"更多行",而是"更多秒"。

物联网设备每秒都在上报,传感器以毫秒级频率采集,监控探头全年无休。智能工厂的设备状态、智慧城市的交通流量、新能源风机的运行指标,这些数据的时间戳是核心维度,丢了一秒,分析就缺了一块。

金仓数据库用时序加空间双引擎来做工业级时序数据处理。这个方案有意思的地方在于,它没有像InfluxDB那样做一个独立的专用数据库,而是把时序能力做进了关系型数据库内核。为什么要走这条路,下面会展开。

每秒都在写入,从不休息

工业时序数据有几个很明显的特征,理解这些特征,才能理解为什么处理它的方式需要专门的设计。

第一个是高频写入。传感器秒级甚至毫秒级持续上报,日均几十亿到几百亿条数据。这种写入压力是持续性的,不存在"高峰期过了就好"的说法,因为设备不会下班。

第二个是海量存储。设备数量多、指标维度丰富,数据量从TB级一路涨到PB级。而且这些数据的价值密度极低,大部分数据写入之后你可能永远不看,但你无法预知哪一秒的数据将来会变得关键。出了事故要查三个月前的某个传感器读数?你必须存着。

第三个是查询复杂度跨度极大。从"最近五分钟的温度"这种毫秒级点查,到"过去一年里每台设备在特定工况下运行了多少小时"这种跨年度聚合分析,同一套系统要应付完全不同的查询模式。

第四个是实时响应的刚性需求。告警触发这种事,差几秒钟可能就不是"警告"而是"事故"了。这意味着数据从写入到能被查询到之间的延迟必须极短。

第五个是冷热分明。最近的数据频繁访问,三个月前的数据偶尔看一眼,两年前的数据基本不动。但你不能删,合规要求往往规定数据必须保留五年以上。

从凑合用,到专用工具,再到融合方案

有了这些特征,再看时序数据处理技术的发展脉络,逻辑就清晰了。

第一阶段是凑合着用。在关系型数据库上加自定义表结构,把时间戳当索引。能跑,但写入慢、查询慢、存储成本高。这是不得已的办法。

第二阶段是专用工具。InfluxDB这类专用时序数据库的出现,解决了写入慢的问题,简单查询也变快了。但这个方案有一个结构性缺陷,它把时序数据和业务数据的生态割裂了。举一个具体的例子:你想查"上个月销售额最高的五家门店里,哪台设备的故障率最高"。销售额在业务数据库里,设备故障数据在时序数据库里,你得先在一个库查出门店排名,再把结果带到另一个库里做筛选。两套系统,两套查询语言,两组维护人员。

第三阶段是融合方案,也就是金仓走的路。金仓KES直接把时序能力做进了关系型数据库内核。时序数据、空间数据、业务数据在同一个库里,用同一种SQL查询。这个架构选择的核心逻辑是:时序数据从来不是孤立存在的,它总要跟设备信息关联,跟地理位置关联,跟业务记录关联。与其建两套系统来回拼接,不如用一套系统统一处理。

时序加空间,一个库两种能力

金仓时序能力的底层是双引擎架构:时序引擎和空间引擎运行在同一个KES数据库内,上面再加一个关系引擎做底座,最底层是统一SQL查询引擎。

时序引擎负责高速写入、时间聚合和数据压缩。它支持千万级设备持续高并发写入,内置时间窗口聚合函数,基于自动化数据分区(Chunk)做高压缩比存储。

空间引擎负责GIS查询、空间索引和坐标转换。它和时序引擎的联动是这个架构最独特的地方,你可以在一条SQL里同时查询"某个时间段内"和"某个空间区域内"的数据。比如"查过去一周在机场周边特定区域频繁出现的车辆",在传统架构里需要时序数据库和空间数据库分两次查询再拼结果,在这里就是一条SQL。

关系引擎提供ACID事务、复杂关联和存储过程能力。这是金仓的底座,它保证了时序数据也有事务保障,也可以跟业务表做JOIN。

最底层的统一SQL查询引擎意味着开发者不需要学新语言。不管是时序查询、空间查询还是关系查询,用的都是标准SQL。

设备越多,差距越大

架构说清楚了,来看实测。

用业界公认的时序基准测试套件TSBS,金仓和InfluxDB做了一组从100台到1000万台设备的对比。结果很有意思,设备数量越大,差距越大。

写入性能方面,100台设备时两者互有优劣,可以认为在一个水平线上。400台设备、每台10指标时,金仓的写入吞吐达到InfluxDB的162%。到了1000万台设备的极限压力下,金仓达到267%。

背后的原因不复杂:InfluxDB在单机架构下,写入路径在数据量大到一定程度后会遇到瓶颈;而金仓可以把写入压力分摊到多个节点上,规模越大,分摊效果越明显。

查询性能的差距更大。简单聚合查询,单设备、单指标、短时间窗口,两者都在毫秒级,差不多。到了中等复杂度,多指标聚合、跨设备分组,金仓可达InfluxDB的3-4倍。到了高复杂度关联分析,差距以数量级计算。

一个最具代表性的场景:查询某个时间段内每台设备的最后一次读数,400台设备的数据。金仓用了147.36毫秒,InfluxDB用了10514.64毫秒。差了超过70倍。

这个差距不是因为金仓在查询优化上特别出色,虽然优化确实做得不错,而是因为InfluxDB的架构在这个类型的查询上有本质性的短板。专用时序数据库的设计取舍是把写入和简单点查做到极致,代价就是复杂查询的能力弱。这不是调参数能解决的,是架构级的取舍。

跑分之外的三件事

跑分重要,但不是全部。企业在生产环境里要考虑的因素比纯性能更多。

第一件事是SQL生态。金仓基于关系型数据库内核,完整支持存储过程、ACID事务、多表关联查询。团队已有的SQL分析工具可以直接用,不需要学新的查询语言。对于已经在关系型数据库上投了大量时间和技能的团队来说,这个兼容性意味着迁移的学习成本几乎为零。

第二件事是存储成本。金仓提供了基于时间的自动化数据分区和保留策略。冷数据经过高压缩比存储,实测能达到1:4的压缩比,100TB数据实际只占25TB磁盘。冷热分级意味着热数据走高性能存储保证响应速度,冷数据走高压缩归档降低存储成本,两边都能兼顾。

第三件事是多模融合。时序数据、GIS空间数据、JSON文档数据在同一个库里直接关联查询,不需要跨系统JOIN。这在工业场景里的价值特别大,一台设备的运行状态是时序数据,它的地理位置是空间数据,它的规格参数是文档数据,三者本来就应该在同一个查询里出现。

从港口到风机,四个真实场景

从架构回到实践,以下案例能看出时序能力在不同场景下的表现。

泰兴交通用金仓给港口做管理系统。在这个项目里,时序数据是集卡和拖车的秒级GPS轨迹数据,空间数据是港口地理围栏和航道信息。两者合在一起,可以做"过去一小时内哪些车驶入过禁行区域"这种时空联合查询。日均几十亿条数据写入,查询响应速度一直稳定。

新能源领域的案例更能说明时序和业务的融合需求。某企业上千台风机的运行状态被持续监测,每秒数十万点传感器数据写入。运营团队需要查的不是单独的温度或转速,而是"这台风机当前的状态,跟它同型号的另一台比有什么差异",这需要把传感器的时序数据跟设备元数据放在一起做关联查询。金仓在这种复杂分析查询上的性能达到了InfluxDB的2到70倍,而且凭借更高的数据压缩比,存储成本预计节省超过百万元。

写在最后

时序数据库的选型,底色是"专用"和"通用"之间的权衡。

InfluxDB这类专用数据库在简单场景下表现很好,写入快,点查快,部署简单。但它快的代价是生态割裂:复杂查询慢,事务不支持,需要跟业务数据库分开维护。当业务规模小、查询模式简单的时候,这个代价可以接受。但当业务开始需要把时序数据跟设备信息、地理位置、业务记录关联分析的时候,割裂的成本就急剧上升了。

金仓把时序能力做进关系型数据库内核,走的是另一条路,用通用数据库的内核能力去覆盖专用场景。优势很明显:不需要另外学技术栈,不需要跨系统拼接查询结果,已有的SQL工具和技能可以继续用。

对工业场景来说,这个权衡的方向通常是明确的。因为工业里的时序数据从来不是孤立存在的,它总要跟设备信息关联,跟地理位置关联,跟业务记录关联。这些关联分析的能力,恰恰是通用数据库的长处。