2017-07-20 124 views
0

我想做大串的比較 - 兩個表之間(5000 80000個字符)在Oracle DB和簡單地確定是否有任何差異。我計劃在存儲它們之前將字符串轉換爲BLOB,並且正在考慮兩種方法來進行比較。DBMS_LOB.Compare VS MD5校驗比較

什麼是在使用DBMS_LOB.compare功能VS使用MD5散列函數,並生成校驗來比較兩個BLOB的性能和精確度可能的區別在哪裏?

+0

你可以追蹤它,找出肯定。你可能會感到驚訝。我有時候是。 – jeff6times7

回答

0

只需使用常識......

案例1 – dbms_lob.compare()首次

價格:

  1. 閱讀整個LOB#1。
  2. 閱讀整個LOB#2。

我們可以忽略實際比較,因爲這是在內存中完成的,而讀取LOB是從磁盤完成的。

整體價格= 2×從磁盤讀取。

案例1 – dbms_lob.compare()供以後調用

價格:

  1. 閱讀整個LOB#1。
  2. 閱讀整個LOB#2。

我們可以忽略實際比較,因爲這是在內存中完成的,而讀取LOB是從磁盤完成的。

整體價格=磁盤讀取的2倍。

案例2 –比較MD5哈希

價格:

  1. 閱讀整個LOB#1,從它計算MD5。
  2. 讀取整個LOB#2,從中計算出MD5。

我們可以忽略實際的比較,因爲這是在內存中完成的,只比較短的字節序列。

總體價格= 2×從磁盤+ 2×計算MD5讀取。

我認爲MD5可以與現代的CPU沒有明顯的性能下降來計算,因此我建議何罪MD5也爲整體價格估計計算。因此...

總體價格= 2×從磁盤讀取。

案例2 –比較MD5哈希值供以後調用

假設你的LOB並沒有改變,因此您預先創建和存儲的MD5校驗是正確的對非改的LOB,價格是...好吧,沒有從磁盤讀取LOB;有僅僅是預先計算的MD5校驗和的比較,所以...

總體價格=常數1

結論

現在你選擇最適合你。

如果您需要一次性比較,請使用dbms_lob.compare()

但是,如果您需要將每個LOB與每個LOB進行比較(= n × × n比較總數),那麼您肯定會預先計算MD5校驗和,然後比較校驗和。