我想做大串的比較 - 兩個表之間(5000 80000個字符)在Oracle DB和簡單地確定是否有任何差異。我計劃在存儲它們之前將字符串轉換爲BLOB,並且正在考慮兩種方法來進行比較。DBMS_LOB.Compare VS MD5校驗比較
什麼是在使用DBMS_LOB.compare功能VS使用MD5散列函數,並生成校驗來比較兩個BLOB的性能和精確度可能的區別在哪裏?
我想做大串的比較 - 兩個表之間(5000 80000個字符)在Oracle DB和簡單地確定是否有任何差異。我計劃在存儲它們之前將字符串轉換爲BLOB,並且正在考慮兩種方法來進行比較。DBMS_LOB.Compare VS MD5校驗比較
什麼是在使用DBMS_LOB.compare功能VS使用MD5散列函數,並生成校驗來比較兩個BLOB的性能和精確度可能的區別在哪裏?
只需使用常識......
案例1 – dbms_lob.compare()
首次
價格:
我們可以忽略實際比較,因爲這是在內存中完成的,而讀取LOB是從磁盤完成的。
整體價格= 2×從磁盤讀取。
案例1 – dbms_lob.compare()
供以後調用
價格:
我們可以忽略實際比較,因爲這是在內存中完成的,而讀取LOB是從磁盤完成的。
整體價格=磁盤讀取的2倍。
案例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校驗和,然後比較校驗和。
你可以追蹤它,找出肯定。你可能會感到驚訝。我有時候是。 – jeff6times7