实现原理
ddb-data-check 执行表结构检查和 item 级数据比对,未调用任何写 API。
表结构检查
工具先对 source 和 target 执行 DescribeTable,检查分区键名称、可选排序键名称,以及每个本地二级索引的名称和排序键名称。发现差异时,报告写入 table_schema_diff,该表的 item 校验停止。
数据比对流程
check_mode 决定哪一端是基准端。source 模式扫描 source,target 模式扫描 target。
text
基准端 Scan
↓
提取主键和完整 item
↓
对端 GetItem
↓
反序列化并比较字段
↓
写入 JSON 差异报告基准端 Scan 返回的原始主键 AttributeValue 直接用于对端 GetItem,避免数值主键在格式转换时变化。
item 比较
两端 item 反序列化为 map[string]interface{}。程序先归一化数值类型并直接比较;发现不一致时,再对 slice 递归排序,用于处理 DynamoDB Set 的无序性。
比对结果分为:
item_missing_in_peer:对端没有该主键。item_diff:两端都有该 item,字段内容不一致。item_error:GetItem、反序列化或其他读取操作失败。table_summary:记录compared、diff、missing和error统计。
方向与一致性边界
check_mode = "source" 不会发现只存在于 target 的 item。需要检查这类数据时,再使用 check_mode = "target" 执行一次。
校验过程中的 Scan 和 GetItem 没有共享快照时间点。业务同时写入时,报告可能包含短暂差异。