首页/数据/NoSQL 速查/派生数据的对账与修复
选型与架构50 条

派生数据的对账与修复

派生存储(搜索索引、缓存、分析宽表)与主库之间迟早出现漂移:同步失败、消费者重放、程序缺陷都会造成差异。对账任务按时间窗比对计数与聚合指标,发现差异后重放变更或重建分片,修复动作要幂等。

NoSQL 速查数据更新于 2026-10-12

窗口对账(思路示意)

窗口对账(思路示意)
# 1) 按天窗口从主库与派生库各取统计
def daily_stats(day):
    return db.orders.aggregate([
        { "$match": { "updatedAt": {"$gte": day_start(day), "$lt": day_end(day)} } },
        { "$group": { "_id": None, "cnt": {"$sum": 1}, "amount": {"$sum": "$amount"} } }
    ])

# 2) 差异窗口内抽样明细逐条比对,锁定漂移记录
# 3) 修复:从变更日志重放该窗口,或按主键重新同步;动作必须幂等
对账频率按业务敏感度:交易与账单类高频(小时级),展示类可日级
修复策略小范围重放变更;大范围按主键重建;修复过程限速并记录审计
防再犯把导致漂移的失败场景(超时、重试、并发写)补进同步链路的处理逻辑
对账的关注点不是"是否有差异",而是差异可解释、可修复、有上限:给差异率设定阈值并告警,超过阈值暂停切流类的自动操作。

易错点

  • 对账只跑总量:两头都多算少算相同数量时总量抵消,差异被掩盖,要按窗口与分组比对
  • 修复任务不做幂等,重跑一次就重复写入一批数据

数据来源与参考

  • MongoDB Manual: Change streams
  • Elasticsearch Guide: Reindex
  • Debezium Documentation: Connectors
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌