Skip to content

实现原理

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_errorGetItem、反序列化或其他读取操作失败。
  • table_summary:记录 compareddiffmissingerror 统计。

方向与一致性边界

check_mode = "source" 不会发现只存在于 target 的 item。需要检查这类数据时,再使用 check_mode = "target" 执行一次。

校验过程中的 Scan 和 GetItem 没有共享快照时间点。业务同时写入时,报告可能包含短暂差异。

Released under the MIT License.