DBMS_LOB.比较与 MD5 校验和比较



我正在尝试比较oracle数据库中两个表之间的大字符串(5,000 - 80,000个字符(,并简单地确定是否存在任何差异。我计划在存储字符串之前将字符串转换为 BLOB,并且正在寻找两种进行比较的方法。

使用DBMS_LOB.compare 函数与使用 MD5 哈希函数并生成校验和来比较两个 BLOB 在性能和准确性方面可能存在哪些差异?

只是通过使用常识...

案例 1 – 首次dbms_lob.compare()

价格为:

  1. 阅读整个 LOB #1。
  2. 阅读整个 LOB #2。

我们可以忽略实际的比较,因为这是在内存中完成的,而读取 LOB 是从磁盘完成的。

总体价格 = 2 x 从磁盘读取。

案例 1 – 后续调用的dbms_lob.compare()

价格为:

  1. 阅读整个 LOB #1。
  2. 阅读整个 LOB #2。

我们可以忽略实际的比较,因为这是在内存中完成的,而读取 LOB 是从磁盘完成的。

总体价格 = 2 x 从磁盘读取。

案例 2 – 比较 MD5 哈希

价格为:

  1. 阅读整个 LOB #1,从中计算 MD5。
  2. 阅读整个LOB #2,从中计算MD5。

我们可以忽略实际的比较,因为这是在内存中完成的,只比较短的字节序列。

总体价格 = 2 x 磁盘读数 + 2 x 计算 MD5。

我相信MD5可以在现代CPU上没有明显性能下降的情况下计算,因此我建议忽略MD5的整体价格估算计算。因此。。。

总体价格 = 2 x 从磁盘读取。

案例 2 – 比较后续调用的 MD5 哈希

假设您的 LOB 没有更改,因此您预先创建和存储的 MD5 校验和对于未更改的 LOB 是正确的,则价格为...好吧,没有从磁盘读取 LOB;只有预先计算的 MD5 校验和的比较,所以......

总价 = 常数 1

结论

现在,您可以选择最适合您的内容。

如果需要一次性比较,请使用dbms_lob.compare()

但是,如果您需要例如将每个 LOB 与每个 LOB 进行比较(= n ×n个比较总数(,那么您肯定会最好预先计算 MD5 校验和,然后比较校验和。

相关内容

  • 没有找到相关文章

最新更新