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 条可能导致数据库锁竞争加剧,反而降低性能。
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 清洗规则
清洗规则针对价格偏差追溯中的常见数据质量问题:
- 空值处理:价格字段为空时,默认使用合同基准价或上次交付价填充;若均不可得,标记为“待人工确认”。
- 格式标准化:货币单位统一为“元”(保留两位小数),日期格式统一为
YYYY-MM-DD HH:mm:ss,供应商编码统一为大写。 - 异常值过滤:单价 ≤0 或超过合同价 10 倍的数据,直接标记为异常并写入隔离表,不参与追溯计算。
- 关联校验:采购订单号必须在 ERP 订单主表中存在,否则视为“孤儿数据”并记录告警。
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 服务器环境。实际生产环境需根据数据量级、网络带宽和硬件配置重新压测。批量大小、索引设计、连接池配置是影响采集层性能的三大关键变量。