4. 数据采集层优化:批量采集接口设计、增量同步策略、数据去重与清洗规则

数据采集层是价格偏差预防体系的第一个性能瓶颈点。供应商交付批次追溯涉及多源异构数据(ERP 采购订单、WMS 入库单、供应商发货通知、合同价格表),若采用逐条同步方式,单日百万级记录将导致接口响应超时、数据库连接池耗尽。本章聚焦采集层的三项核心优化:批量采集接口设计、增量同步策略、数据去重与清洗规则,确保数据在进入追溯链路前已具备高吞吐、低延迟、无脏数据的基础。

4.1 批量采集接口设计

传统逐条采集(单次 1 条记录)在追溯场景下不可接受。批量接口通过合并请求、减少网络往返次数、利用数据库批量插入能力,将吞吐量提升 10~50 倍。设计要点如下:

设计维度 优化前(逐条) 优化后(批量) 性能提升参考
请求方式 单条 POST /record 批量 POST /batch-records 网络开销降低 90%
数据格式 单 JSON 对象 JSON 数组(≤500 条/批) 序列化效率提升 5x
事务处理 逐条提交,频繁 commit 批量 commit(每批一次) 写入吞吐提升 20x
错误处理 单条失败即中断 批量内逐条标记失败原因 可用性提升,避免全量回滚
实践建议:批量大小需根据网络延迟、数据库写入能力和记录大小动态调整。推荐初始值 200 条/批,通过压测找到最优值(通常 200~500 条)。超过 1000 条可能导致数据库锁竞争加剧,反而降低性能。
批量采集接口设计流程 ERP 采购订单 WMS 入库单 供应商发货通知 批量聚合层 合并 ≤500 条/批 JSON 数组格式 批量采集接口 POST /batch-records 批量 commit DB 批量大小动态调整:200~500 条/批 错误逐条标记,不中断整批

4.2 增量同步策略

全量同步在数据量超过百万级后不可持续。增量同步只采集自上次同步后发生变化的数据,大幅降低传输量和处理时间。追溯场景下推荐三种增量策略:

  • 时间戳增量(推荐):基于记录中的 update_time 或 modified_date 字段,同步上次成功时间戳之后的数据。实现简单,但需确保源系统时间戳准确且不可回退。
  • 水位线增量:使用自增 ID 或序列号作为水位标记,每次同步记录最大 ID,下次从该 ID+1 开始。适用于只追加不更新的数据(如日志型入库记录)。
  • 变更数据捕获(CDC):通过解析数据库 binlog 或 WAL 日志,实时捕获插入、更新、删除操作。延迟最低(秒级),但架构复杂度高,适合对实时性要求极高的价格偏差预警场景。
策略 延迟 实现复杂度 资源消耗 适用场景
时间戳增量 分钟级(取决于轮询间隔) 低 低 ERP 订单、合同价格表
水位线增量 分钟级 低 极低 WMS 入库流水、日志
CDC(binlog) 秒级 高 中 价格偏差实时预警
性能调优要点:增量同步的轮询间隔不宜过短(建议 ≥30 秒),否则空轮询会浪费 CPU。对于时间戳策略,务必在源表 update_time 字段上建立索引,否则全表扫描将抵消增量优势。

4.3 数据去重与清洗规则

供应商交付批次追溯中,重复数据和脏数据会直接导致价格偏差计算错误。去重与清洗必须在采集层完成,避免脏数据进入后续的关联分析环节。

4.3.1 去重规则

基于业务主键或联合唯一键进行去重。追溯场景的典型去重键:

  • 采购订单号 + 行项目号 + 供应商批次号:唯一确定一个交付批次的价格记录。
  • 入库单号 + 物料编码:防止同一批次重复入库。
  • 合同编号 + 版本号:确保价格基准的唯一性。

去重策略分为 “先查后插” 和 “插入忽略” 两种:

策略 实现方式 性能 适用场景
先查后插 SELECT 检查是否存在 → 不存在则 INSERT 低(两次操作) 小批量、低并发
插入忽略 INSERT IGNORE / ON DUPLICATE KEY UPDATE 高(一次操作) 大批量、高并发(推荐)
推荐方案:使用数据库的 ON DUPLICATE KEY UPDATE 语法,在批量插入时自动忽略重复记录,同时更新非关键字段(如同步时间戳)。避免先查后插带来的额外查询开销。

4.3.2 清洗规则

清洗规则针对价格偏差追溯中的常见数据质量问题:

  1. 空值处理:价格字段为空时,默认使用合同基准价或上次交付价填充;若均不可得,标记为“待人工确认”。
  2. 格式标准化:货币单位统一为“元”(保留两位小数),日期格式统一为 YYYY-MM-DD HH:mm:ss,供应商编码统一为大写。
  3. 异常值过滤:单价 ≤0 或超过合同价 10 倍的数据,直接标记为异常并写入隔离表,不参与追溯计算。
  4. 关联校验:采购订单号必须在 ERP 订单主表中存在,否则视为“孤儿数据”并记录告警。
数据去重与清洗流程 原始采集数据 去重模块 ON DUPLICATE KEY 清洗模块 空值/格式/异常值 干净数据 异常隔离表 待人工确认 去重键:采购订单号 + 行项目号 + 供应商批次号 异常值:单价 ≤0 或 > 合同价 10 倍

4.4 采集层性能指标参考

优化后的数据采集层应达到以下基准指标(基于 10 万条供应商交付批次数据压测):

指标 优化前 优化后 提升倍数
单次采集吞吐量 200 条/秒 8,000 条/秒 40x
接口平均响应时间 1,200 ms 85 ms 14x
数据重复率 5.2% 0.01% 520x
脏数据流入率 3.8% 0.05% 76x
注意:以上指标基于 PostgreSQL 15 + 8 核 32G 服务器环境。实际生产环境需根据数据量级、网络带宽和硬件配置重新压测。批量大小、索引设计、连接池配置是影响采集层性能的三大关键变量。