【发布时间】:2019-01-14 00:21:00
【问题描述】:
我的任务是比较 2 个 MSAccess 表。它们的结构相同,来自第 3 方数据源的 2 次连续导出,相隔 1 个月(n 和 n+1)。 10K 条记录,35 个字段。
我不一定需要知道哪些字段已更新,只需知道记录中的某些内容发生了变化。然后,我的进程将继续相应地处理目标数据库中的增量记录。
我已经识别了 n+1 个数据中的插入和删除。这将是每月一次的练习。
对开始这项任务有什么建议吗?我不希望逐个字段、逐行比较。也许相当于一个~checksum?
谢谢!
【问题讨论】:
-
由于数据库的工作方式,您天生无法计算表的校验和,因为该表可能包含碎片页面/未提交的数据/等。当然,您可以导出为没有这些问题/功能的格式,并在导出的文件上计算校验和。
-
Erik,本身不是传统的校验和,而是用于预先计算以比较以检测包含更改的记录的其他方法。粗略示例:将一条记录的所有字段值连接到一个备注字段中,并将该长字符串与之前的长字符串进行比较以查找不匹配...
-
注意 - 35 个字段之一已经是备注字段,因此上述想法可能无效。
-
老实说,这只是比逐行、逐字段比较慢。我已经在几分钟内完成的 10K 记录表上使用了代码。不过,备注字段可能会减慢速度。
-
请注意,ADODB 记录集确实提供了
.GetString方法将整个记录集转换为格式化字符串,但是当使用主要具有数字类型的表时,这会导致开销,因为 1. 转换为字符串的数字类型需要更多的存储空间,2. 它不能提前失败,两个记录集都需要完全加载到内存中,3. 它需要分配和比较 2 个非常大的字符串。我怀疑它会比逐行逐字段比较更快,但它肯定更容易编写。