DBMS_LOB.Compare与MD5校验和比较

时间:2017-07-20 02:00:03

标签: oracle compare blob md5

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

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

1 个答案:

答案 0 :(得分:0)

只是使用常识......

案例1 - 第一次dbms_lob.compare()

价格是:

  1. 阅读整个LOB#1。
  2. 阅读整个LOB#2。
  3. 我们可以忽略实际的比较,因为这是在内存中完成的,而读取LOB则是从磁盘完成的。

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

    案例1 - dbms_lob.compare()用于后续调用

    价格是:

    1. 阅读整个LOB#1。
    2. 阅读整个LOB#2。
    3. 我们可以忽略实际的比较,因为这是在内存中完成的,而读取LOB则是从磁盘完成的。

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

      案例2 - 比较MD5哈希

      价格是:

      1. 读取整个LOB#1,从中计算出MD5。
      2. 读取整个LOB#2,从中计算出MD5。
      3. 我们可以忽略实际的比较,因为这是在内存中完成的,只比较短的字节序列。

        总价=从磁盘读取2 x +计算MD5 2 x。

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

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

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

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

        总价=常数1

        <强>结论

        现在你选择最适合你的。

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

        但是,如果您需要,例如将每个LOB与每个LOB进行比较(= n × n 比较总计),那么您可以更好地预先计​​算MD5校验和并比较之后的校验和。 / p>