数据存储与架构:数据湖与数据仓库选型、时序数据库应用、数据中台架构设计

大家好,我是老张。在风电行业摸爬滚打了十几年,今天咱们聊聊数据存储与架构。说实话,很多风电企业数据量上来了,但存储架构还是一团乱麻。我见过太多项目,风机数据存得乱七八糟,想用的时候找不着,找着了又对不上。嗯,今天咱们就把这事儿捋清楚。

一、数据湖 vs 数据仓库:别选错了

先问个问题:你手头的风电数据,是结构化多还是非结构化多?

我个人习惯把数据湖比作一个大仓库,什么东西都能往里扔。原始振动数据、SCADA日志、气象文件、甚至现场照片,统统可以存。数据仓库呢,更像一个精装修的图书馆,数据进来之前已经整理好了,按主题分门别类。

什么时候用数据湖?

  • 数据源杂,格式不统一。比如不同风机厂商的SCADA数据,字段名都不一样
  • 需要做探索性分析,还不知道最终要用哪些字段
  • 原始数据要长期保留,方便回溯

什么时候用数据仓库?

  • 业务报表固定,比如每日发电量统计、故障率分析
  • 查询性能要求高,需要秒级响应
  • 数据质量要求严格,不能有脏数据

我的建议:风电大数据场景,我推荐「湖仓一体」架构。数据湖存原始数据,数据仓库存清洗后的业务数据。两者通过ETL管道打通。我在某风电场项目中就是这么干的,效果不错。

二、时序数据库:风电数据的灵魂

风电数据有个特点——全是时间序列。风速、功率、转速、温度,每个传感器每秒都在产生数据。传统的关系型数据库处理这种数据,性能会急剧下降。

我最早用MySQL存SCADA数据,10台风机还行,到50台就扛不住了。后来换了时序数据库,才真正解决问题。

主流时序数据库对比:

数据库 适用场景 写入性能 查询性能 运维复杂度
InfluxDB 中小规模(<100台风机)
TimescaleDB 需要与关系型数据关联
TDengine 大规模(>500台风机) 极高 极高
ClickHouse 分析型查询 极高

避坑指南:我曾经在一个项目中选了InfluxDB,结果风机数量从80台扩到200台,写入性能直接崩了。后来换成了TDengine,才稳住。选型时一定要考虑未来3-5年的数据增长。

举个例子,用TDengine查询某台风机过去24小时的功率数据:

-- 创建超级表
CREATE STABLE wind_turbine_metrics (
    ts TIMESTAMP,
    active_power FLOAT,
    wind_speed FLOAT,
    rotor_speed FLOAT
) TAGS (turbine_id INT, farm_id INT);

-- 插入数据
INSERT INTO turbine_001 USING wind_turbine_metrics TAGS (1, 101) VALUES (now, 1500.5, 12.3, 9.8);

-- 查询过去24小时平均功率
SELECT AVG(active_power) 
FROM wind_turbine_metrics 
WHERE turbine_id = 1 
  AND ts >= now - 24h;

你看,语法简单,性能还快。这就是时序数据库的魅力。

三、数据中台架构设计:别搞得太复杂

数据中台这个词,这几年被炒得很热。说白了,就是把数据统一管理起来,让业务部门能方便地用数据。但很多风电企业把中台搞成了「中台」,又重又慢。

我设计的风电数据中台,一般分四层:

  1. 数据采集层:对接SCADA、振动监测、CMS、气象塔等系统
  2. 数据存储层:时序数据库+数据湖+数据仓库混合使用
  3. 数据计算层:实时流计算(Flink)+ 离线批计算(Spark)
  4. 数据服务层:统一API网关,对外提供数据服务

核心原则:数据中台不是技术堆砌,而是业务驱动。我见过最成功的案例,中台团队只有3个人,但把数据治理得明明白白。关键是把数据标准定好,元数据管理做好。

下面这张图,是我常用的风电数据中台架构:

风电数据中台架构图 数据源层 SCADA系统 | 振动监测 | CMS系统 | 气象塔 | 功率预测 | 现场巡检 数据采集层 Kafka消息队列 | Flume日志采集 | MQTT物联网协议 数据存储层 时序数据库(TDengine/InfluxDB) | 数据湖(MinIO/HDFS) | 数据仓库(ClickHouse) 元数据管理 | 数据血缘 | 数据质量监控 数据计算层 实时流计算(Flink) | 离线批计算(Spark) | 机器学习模型训练 数据服务层 统一API网关 | 数据可视化 | 报表服务 | 告警推送

注意:数据中台不是一次性建成的。我建议分三期走:第一期打通SCADA和振动数据;第二期接入气象和功率预测;第三期做数据资产化和变现。步子迈大了,容易扯着蛋。

四、实战经验总结

最后,分享几个我在项目中踩过的坑:

  • 数据压缩:风电时序数据量巨大,一定要开启压缩。TDengine默认压缩比能达到10:1,能省不少存储成本
  • 数据保留策略:原始数据保留3个月,聚合数据保留1年,统计特征保留永久。别什么都存,存了也用不上
  • 数据一致性:不同数据源的时间戳可能不同步。我习惯以SCADA系统的时间为准,其他系统做对齐
  • 冷热数据分离:热数据放SSD,冷数据放HDD或者对象存储。能省一半以上的存储费用

一个小技巧:数据湖里的原始数据,建议用Parquet格式存储。压缩率高,查询性能也好。我试过从CSV换成Parquet,查询速度提升了5倍,存储空间减少了60%。

好了,关于数据存储与架构,今天就聊到这儿。记住一句话:架构是为业务服务的,别为了技术而技术。下一章咱们聊聊数据治理,那才是真正头疼的地方。


公众号:蓝海资料掘金营,微信deep3321