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

做算法调试,最怕什么?

我个人最怕的是——数据丢了,或者数据不对,你还不知道。

数据回放这件事,说白了就是「把现场还原出来」。但前提是,你得先把现场的数据给存好。这一章我们就聊聊数据采集与存储的那些事。嗯,都是我在项目里踩过的坑,你听听看。

2.1 数据源类型:你的数据从哪来?

数据源的类型,决定了你的采集策略。我一般把它们分成三类:

  • 传感器数据:比如摄像头、激光雷达、IMU。这类数据量大,频率高,实时性强。
  • 系统日志:比如应用日志、系统事件、错误栈。这类数据稀疏,但信息密度高。
  • 中间结果:比如模型推理输出、特征向量、中间变量。这类数据是调试的核心,但往往被忽略。

你想想看,如果只存了传感器数据,没有存中间结果,那回放的时候你只能看到「输入」和「输出」,中间发生了什么?一片黑盒。

我的建议: 至少把关键节点的中间结果也存下来。哪怕只存一部分,也能帮你定位问题。

2.2 数据采集策略:怎么采才不丢?

数据采集不是「录屏」那么简单。你得考虑几个问题:

  • 全量采集 vs 采样采集:全量采集最安全,但存储压力大。采样采集省空间,但可能漏掉关键帧。
  • 同步采集 vs 异步采集:多路数据源之间,时间戳对齐是老大难。我遇到过摄像头和激光雷达时间戳差了200ms,回放时画面和点云完全对不上。
  • 触发式采集 vs 持续采集:触发式只在特定事件发生时记录,适合异常场景。持续采集则适合常规运行。

我个人习惯的做法是:持续采集 + 环形缓冲区。平时一直录,但只保留最近N分钟的数据。一旦触发异常事件,就把缓冲区里的数据「冻结」下来,存到持久化存储里。

小技巧: 环形缓冲区的大小,建议至少能覆盖你调试时需要的上下文。我一般设成30秒到2分钟。

2.3 数据存储格式:JSON / CSV / Parquet

格式选不对,后面全白费。这三种格式我都用过,说说我的感受。

格式 优点 缺点 适合场景
JSON 可读性强,结构灵活,支持嵌套 体积大,解析慢,不适合大规模数据 配置、小样本、调试阶段
CSV 简单,通用,Excel可直接打开 不支持嵌套,列数固定,类型信息丢失 表格型数据、统计分析
Parquet 列式存储,压缩率高,查询快 可读性差,工具链要求高 大规模数据、生产环境

我曾经在一个项目里,用JSON存了3小时的传感器数据,结果文件大小超过10GB,加载一次要5分钟。后来换成Parquet,文件压缩到1.2GB,加载时间降到10秒。嗯,差距就是这么大。

避坑指南: 我曾经因为偷懒,直接用CSV存了带时间戳的嵌套结构,结果解析时发现时间戳被Excel自动转换了格式,数据全乱了。从那以后,我坚持用ISO 8601格式存时间戳,并且优先用Parquet。

2.4 知识体系总览

下面这张图,是我自己总结的数据采集与存储的核心逻辑。你看一眼,心里就有谱了。

数据源类型 采集策略 存储格式 传感器数据 系统日志 中间结果 全量 vs 采样 同步 vs 异步 触发 vs 持续 JSON CSV Parquet 核心原则 数据完整 > 存储效率 > 可读性

说白了,数据采集与存储就是三个环节:知道有什么数据 → 决定怎么采 → 选好格式存下来。每一步都有坑,但每一步也都有成熟的解法。

一句话总结: 别等到调试时才发现数据不全。提前想好数据源、采策略、存格式,后面能省你80%的排查时间。

可可精品资料库