数据采集与存储:数据源类型、采集策略与存储格式

做数据回放,第一步就是搞定数据怎么来、怎么存。这活儿我干了好几年,踩过的坑真不少。今天咱们就聊聊数据采集与存储这块,我把自己的经验掰开揉碎了讲给你听。

数据源类型:你面对的是什么样的数据?

数据源这东西,说白了就是数据的“老家”。我见过太多人一上来就闷头写采集脚本,结果发现数据格式不对、字段对不上,白忙活半天。所以,先搞清楚数据源类型,这是基本功。

常见的几类数据源,我列个表给你看:

数据源类型 典型代表 特点
关系型数据库 MySQL、PostgreSQL、Oracle 结构化强,支持事务,适合OLTP场景
非关系型数据库 MongoDB、Redis、Cassandra 灵活schema,高扩展性,适合海量数据
日志文件 Nginx日志、应用日志 半结构化,时间序列特征明显
消息队列 Kafka、RabbitMQ、Pulsar 流式数据,实时性高,适合事件驱动
API接口 RESTful API、gRPC 按需拉取,数据量可控,但延迟不稳定

我个人习惯,拿到一个新项目,先花半天时间梳理数据源清单。你想想看,如果连数据从哪来都不清楚,后面的采集策略就是瞎搞。

小技巧: 做数据回放时,日志文件往往是最容易被忽略的宝藏。我曾在一次故障排查中,靠着一份Nginx访问日志,硬是把三小时前的用户操作轨迹给还原了出来。

数据采集策略:全量还是增量?这是个问题

数据采集策略,核心就两个词:全量采集和增量采集。但实际落地时,门道可多了。

全量采集

就是把数据源里的所有数据一次性拉过来。适合数据量小、变化不频繁的场景。比如配置表、字典表这些,我一般每周跑一次全量。

增量采集

只拉取新增或变化的数据。适合大数据量、高频更新的场景。比如用户行为日志,每秒都在产生新数据,全量采集根本不现实。

这里有个坑,我曾经踩过——增量采集的断点续传问题。有一次采集任务跑了12小时,结果中间网络断了,重新跑时不知道从哪续上,只能全量重来,气得我够呛。

避坑指南: 做增量采集时,一定要设计好偏移量或时间戳的持久化机制。我现在的做法是,把上次采集的偏移量存到Redis里,每次启动任务先读Redis,这样就算任务挂了也能无缝续传。

常见的采集策略,我总结成下面这张图:

数据采集策略核心逻辑 数据源 数据量大小? 全量采集 增量采集 全量快照 增量日志

嗯,这里要注意,实际项目中往往是全量+增量混合使用。比如每天凌晨跑一次全量,白天每5分钟跑一次增量。这样既有全量数据的完整性,又有增量数据的实时性。

数据存储格式:CSV、Parquet、Avro怎么选?

存储格式这块,我见过太多人无脑选CSV,觉得简单通用。但说实话,在数据回放场景下,CSV很多时候是坑。咱们一个一个说。

CSV:简单但低效

CSV的优点就是人类可读,Excel能直接打开。但缺点也很明显:

  • 没有schema信息,字段类型全靠猜
  • 压缩率低,同样数据比Parquet大3-5倍
  • 不支持嵌套结构,复杂数据得拆成多张表

我建议,CSV只适合做数据交换的中间格式,或者数据量小于100MB的小项目。别拿它当主力存储。

Parquet:列式存储的王者

Parquet是我个人最推荐的格式,尤其适合数据回放。为什么?

  • 列式存储:查询时只读需要的列,IO开销小
  • 高压缩率:支持snappy、gzip等压缩算法,存储成本低
  • 自带schema:字段名、类型、精度都写在文件里
  • 支持谓词下推:过滤条件直接在文件层面生效
实战经验: 我之前做过一个项目,每天要回放500GB的日志数据。用CSV存,查询一次要20分钟。换成Parquet后,同样的查询只要40秒。这差距,你品品。

Avro:行式存储的利器

Avro是行式存储,适合写密集的场景。比如Kafka消息的序列化,Avro就是标配。

  • 行式存储:写入速度快,适合流式数据
  • schema可演化:字段可以增删,兼容性好
  • 自带序列化:数据紧凑,网络传输效率高

但Avro的查询性能不如Parquet,因为它是行式存储,读数据时得把整行都读出来。

三种格式的对比,我整理成表格:

特性 CSV Parquet Avro
存储方式 行式 列式 行式
压缩率 低 高 中
查询性能 差 优 中
写入性能 中 中 优
schema支持 无 有 有
适用场景 小数据、临时交换 分析查询、数据回放 流式写入、消息队列

选型时,我一般遵循这个原则:读多写少用Parquet,写多读少用Avro,临时用用CSV。数据回放场景下,绝大多数是读操作,所以Parquet是我的首选。

一个小建议: 如果你用Spark做数据回放,Parquet是原生支持的,连配置都不用改。我每次建表都默认用Parquet格式,省心。

最后说一句,数据采集与存储是数据回放的基石。地基没打好,后面复现场景就是空中楼阁。我见过太多人在这上面翻车,所以多花点心思在这块,绝对值得。

可可精品资料库